supposer que j'ai une chaîne contenant
- une chaîne séparée par des virgules
- et texte Je voudrais les extraire dans un tableau qui est divisé par "chiffres" et "groupe de mots" p> NOTE 0: Il pourrait y avoir plusieurs espaces entre chaque entrée, qui devrait être ignoré. p> Note 1: "Cargo marin" et "Plus de texte" n'est pas séparé en différentes cordes car ils sont un groupe de mots Sans chiffres les séparant.
Bien que arga et argb soient séparés car il y a un nombre entre eux. p> p>
4 Réponses :
Si les espaces sont votre problème. String # Split prend une regex comme paramètre. Ensuite, vous pourriez faire cela:
Mais cela ne résoudra pas tous les problèmes, comme ceux mentionnés dans les commentaires. P> My_List = Arrays.Aslist (my_string.split ("\ s?")); code> p>
Vous pouvez faire quelque chose comme si:
List<String> strings = new ArrayList<>();
String prev = null;
for (String w: my_string.split("\\s+")) {
if (w.matches("\\d+(?:,\\d+)?")) {
if (prev != null) {
strings.add(prev);
prev = null;
}
strings.add(w);
} else if (prev == null) {
prev = w;
} else {
prev += " " + w;
}
}
if (prev != null) {
strings.add(prev);
}
Vous pouvez essayer de fractionnement en utilisant cette regex [a-za-z] + [a-za-z] em> // recherchera un mot, suivi d'un espace (le cas échéant) suivi d'un autre mot (si quelconque). p>
Vous les utilisez comme ceci p> Ce qui suit est la sortie ainsi qu'une explication détaillée de la regex qui est autogogenée de https://regex101.com p>
J'aime Solution Angel Koh et vouloir ajouter dessus. Sa solution ne correspondra que si la partie numérique consiste en une ou deux parties. P>
Si vous souhaitez également capturer des pièces composées de trois parties ou plus, vous devez modifier le regex un peu à: ([\ d,] + | [a-za-z] + (?: * [a-za-z]) *) code>
Le groupe non capturant (?: * [a-za-z]) code> répète les temps infinis, si nécessaire et capturera toutes les pièces numériques pures. P>
2 Marine Cargo Code>, comment savons-nous quecargo code> appartient àmarine code>?La valeur "14,642" est-elle en tant que valeur unique ou deux valeurs E.g: "14" et "642" dans votre sortie attendue?
Pas assez d'informations pour résoudre ce problème vraiment. Comment savons-nous que
cargo marine code> devrait être un seul élément? Ne devrait-il pas être rejoint avec le2 code> résultant dans2 cargo marine code>? Ensuite, nous pourrions supposer que chaque élément a une longueur de 20-25 caractères avec un peu de remplissage ajouté.@Stephanhogenboom Ya 14,642 est la valeur unique
Voulez-vous diviser votre ligne par "chiffres" et "groupe de mots"?
@Angelkoh par groupe de mots
J'ai reformulé votre question et votre titre. Votre titre précédent était trop générique et questionne trop ambiguë (entraînant une vague de bowvotes.) J'espère que cela aide.