1
votes

Java Comment diviser l'arralyist et le définir dans une chaîne ou un tableau séparé

Je suis nouveau en Java. J'ai un objet qui contient les données ci-dessous

[1002,USD,03/09/2019,1004,2,cref,,,,,,,,,, 
 1002,USD,03/09/2019,1005,3,cref,,,,,,,,,, 
 1002,USD,03/09/2019,1003,3,cref,,,,,,,,,]

J'ai utilisé StringTokenizer pour convertir ceci dans arraylist

List<String> elements = new ArrayList<String>();
StringTokenizer st = new StringTokenizer((String) object);

while(st.hasMoreTokens()) {
    elements.add(st.nextToken());
}

Tokenizer convertir ceci sous la forme ci-dessous p>

1002,USD,03/09/2019,1004,2,cref,,,,,,,,,
1002,USD,03/09/2019,1005,3,cref,,,,,,,,,
1002,USD,03/09/2019,1003,3,cref,,,,,,,,,

Je veux le troisième index de chaque ligne (1004,1005,1003) dans une chaîne séparée ou un tableau séparé. Veuillez indiquer ou existe-t-il un autre moyen d'obtenir le troisième index sans utiliser de tokenizer.

version java "1.8.0_161" Java (TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot (TM ) VM serveur 64 bits (build 25.161-b12, mode mixte)


2 commentaires

Quel JDK utilisez-vous?


java version "1.8.0_161" Java (TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot (TM) 64 bits Server VM (build 25.161-b12, mode mixte)


5 Réponses :


0
votes

Si vous savez que vos éléments séparés apparaissent toujours au troisième index, alors comptez simplement.

List<String> elements = new ArrayList<String>();
StringTokenizer st = new StringTokenizer((String) object);
List<String> separateList = new ArrayList<>();    // the list where you put your separate tokens. 

int index=0;                       // start an index counter (at 0)
while(st.hasMoreTokens()) {
   String token = st.nextToken();  // your token in a separat variable
   elements.add(token);            // adds every token to your list
   if(index==3){                   // once your index reaches 3 (4th element) 
      index=0;                     // reset the index to 0
      separateListe.add(token);    // and add the token to the separate list
   }else{
      index++;                     // for every other index, just count (index +1)
   }
}

En général, il est toujours plus facile de tout mettre dans de vraies "Lists" (pas des tableaux, ils sont trop rigides et pas dans des Strings, ils ne fonctionnent pas bien). De cette façon, vous pouvez gérer vos données et les convertir en ce que vous voulez une fois que votre traitement des données est terminé.


2 commentaires

puisqu'il s'agit du troisième index de "chaque ligne", il vous suffit d'ajouter un nouveau si cela réinitialise la variable index à 0 lorsque vous frappez le saut de ligne.


Je pense que vous n'avez pas reçu ma requête ... Je veux (1004,1005,1003) dans une chaîne ou un tableau séparé à partir des données que j'ai.



1
votes

Pour obtenir la valeur nécessaire (4ème élément) de chaque ligne, vous pouvez utiliser la fonction String.split () :

List<String> elements = new ArrayList<String>();
StringTokenizer st = new StringTokenizer((String) object);

while(st.hasMoreTokens()) {
    String[] row = st.nextToken().split(",");
    if (row.length > 3) {
        elements.add(row[3]);
    }
}


1 commentaires

Gardez ceci à l'esprit: "StringTokenizer est une classe héritée qui est conservée pour des raisons de compatibilité bien que son utilisation soit déconseillée dans le nouveau code. Il est recommandé à quiconque recherche cette fonctionnalité d'utiliser la méthode split de String ou le package java.util.regex à la place. " docs.oracle.com/javase/7/docs/ api / java / util /…



0
votes

Vous pouvez utiliser le module pour parcourir votre liste éléments et consulter à chaque fois ceux qui sont égaux à 0:

pour rang comme index de l'élément dans une liste

rank % 3 = 0


0 commentaires

0
votes
String text = "yourtext";
String[] lines = text.split("\\r?\\n");
List<String> elements = new ArrayList<String>();

for(String line:lines) {
  String[] words = line.split(",");
  elements.add(words[3]);
}

0 commentaires

0
votes

Pour une version plus courte, vous pouvez également utiliser Streams:

  1. Créez deux ArrayList supplémentaires pour tamponner les données

    String data = listToStoreData.toString();
    
  2. Divisez chaque élément par ',' dans un tableau et ajoutez-les à la 'deuxième' ArrayList

    second.stream().forEach(s -> listToStoreData.add(s[3]));
    
  3. Pour chaque élément de 'second', poussez les données à la troisième position du tableau dans ArrayList 'listToStoreData'

    elements.stream().forEach(e ->  second.add(e.toString().split(",")));
    
  4. Suivant Convertit la liste en chaîne et stocke la chaîne en variable

    List<String> listToStoreData = new ArrayList<String>();
    List<String[]> second = new ArrayList<String[]>();
    

Sortie des données = [1004, 1005, 1003]


0 commentaires