2017-10-17 7 views
0

Comment obtenir les noms des variables de chaîne et de les attribuer des valeurs, si j'ai les informations contenues dans une seule chaîne?Comment obtenir les noms de variables et leurs valeurs contenues dans une seule chaîne?

J'ai une chaîne comme ceci:

"id: 123487, street1: Stanton, street2: Gateway, street3: Hawkins, city: Horizon" 

Et le résultat que je suis en train de réaliser est la suivante:
id = "123487"
street1 = "Stanton"
street2 = " Gateway »
street3 = "Hawkins"
ville = "horizon"

ce que j'ai à ce jour est ce code:

String scannedData = "id: 123487, street1: Stanton, street2: Gateway, street3: Hawkins, city: Horizon" 


String[] data = scannedData.split(","); 
for (String result1 : data) { 
    Toast.makeText(scanQrActivity.this, 
      result1, Toast.LENGTH_LONG).show(); 
} 

Je suis en mesure de montrer à l'utilisateur en utilisant la Toast est la chaîne séparée par des virgules, et j'ai ceci:
"id: 123487"
"street1: Stanton"
« street2: Gateway »
« street3: Hawkins ville »
« : horizon »

peut-être que je pourrais déjà créer les 5 variables, et obtenir en quelque sorte que les valeurs, donc dans le pour le cycle que je pouvais attribuer à chaque valeur à chaque variable?
Mais je ne sais pas comment, pouvez-vous me aider à réaliser ce que essaie de faire?
Merci!

+0

Il est pas particulièrement clair ce que vous demandez, mais vous pouvez encore diviser la « str: Fnord » String vers le bas à un tableau de deux chaînes à nouveau. – jdv

+0

Ok, je vois, j'essaie de créer des variables de chaîne et de leur assigner des valeurs, par exemple si j'ai cette chaîne: "city: Horizon, street1: Stanton" Je veux avoir une variable chaîne nommée ville avec sa valeur égal à "Horizon" et faire la même chose avec street1 et ainsi de suite. Donc, si j'ai compris votre suggestion était de diviser à nouveau. Mais cette fois divisé par ":"? –

Répondre

1

J'ai créé une classe Location qui contiendra les données que nous allons analyser.

public class Location { 

    private int id; 

    private String street1, street2, street3, city; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getStreet1() { 
     return street1; 
    } 

    public void setStreet1(String street1) { 
     this.street1 = street1; 
    } 

    public String getStreet2() { 
     return street2; 
    } 

    public void setStreet2(String street2) { 
     this.street2 = street2; 
    } 

    public String getStreet3() { 
     return street3; 
    } 

    public void setStreet3(String street3) { 
     this.street3 = street3; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 
} 

Maintenant, nous pouvons utiliser la méthode suivante pour analyser la chaîne d'entrée dans un objet Location. Cette solution permet d'ajouter plus de valeurs-clés à la chaîne d'entrée sans que le programme ne plante. Tout ce que vous devez faire est d'ajouter une déclaration de cas pour la nouvelle clé et ajouter un getter/setter à l'objet Location.

Utilisation:

public static void main(String[] args) { 
    String input = "id: 123487, street1: Stanton, street2: Gateway, street3: Hawkins, city: Horizon"; 
    Location location = parseLocation(input); 

    System.out.println(String.format("id: %d\n" 
      + "street1: %s\n" 
      + "street2: %s\n" 
      + "street3: %s\n" 
      + "city: %s", location.getId(), 
      location.getStreet1(), location.getStreet2(), 
      location.getStreet3(), location.getCity())); 
} 
0
//'main' method must be in a class 'Rextester'. 
//Compiler version 1.8.0_111 

import java.util.*; 
import java.lang.*; 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

class Rextester 
{ 

     private static final String REGEX = ",";//"\\d"; 
       private static final String REGEX2 = ":";//"\\d"; 

    private static final String INPUT ="id: 123487, street1: Stanton, street2: Gateway, street3: Hawkins, city: Horizon"; 

     //"one9two4three7four1five"; 

    //public class SplitDemo2 { 



    public static void main(String[] args) { 
     Pattern p = Pattern.compile(REGEX); 
     String[] items = p.split(INPUT); 
     for(String s : items) { 
      System.out.println(s); 
      Pattern p2 = Pattern.compile(REGEX2); 
      String[] items2 = p2.split(s); 
      for(String s2: items2){ 
       System.out.println(s2); 
      } 
     } 
    } 
//} 

}//end Rextester 

http://rextester.com/NZKDG47991

+0

https://docs.oracle.com/javase/tutorial/essential/regex/pattern.html – Mookayama

0

Merci pour votre aide, vous m'a donné génial suggestions, enfin, je l'ai fait d'une manière plus simple, il pourrait ne pas être le meilleur codage, mais je suis encore à apprendre, Je pense que mon objectif est de code comme vous les gars, afin que vos réponses me aider vraiment à se rendre compte qu'il ya tant pour moi d'apprendre.

String scannedData = "id: 123487, street1: Stanton, street2: Gateway, street3: Hawkins, city: Horizon" 

    String[] data = scannedData .split(","); 
    String id = null; 
    String street1 = null; 
    String street2 = null; 
    String street3 = null; 
    String city = null; 
    for (String result : data) { 

     id = data[0].replace("id: ", ""); 
     street1 = data[1].replace("street1: ", ""); 
     street2 = data[2].replace("street2: ", ""); 
     street3 = data[3].replace("street3: ", ""); 
     city = data[4].replace("city: ", ""); 
    } 

Ensuite, je l'ai montré à chaque variable à l'aide d'un Toast.