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)
5 Réponses :
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é.
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.
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]); } }
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 /…
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
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]); }
Pour une version plus courte, vous pouvez également utiliser Streams:
Créez deux ArrayList supplémentaires pour tamponner les données
String data = listToStoreData.toString();
Divisez chaque élément par ',' dans un tableau et ajoutez-les à la 'deuxième' ArrayList
second.stream().forEach(s -> listToStoreData.add(s[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(",")));
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]
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)