Splitting chaine de caractère java

Résolu/Fermé
morakevi - 28 mai 2015 à 19:26
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 - 3 juin 2015 à 09:41
Bonjour,

j'aimerai savoir comment je peux faire pour splitter une chaine de caractère à chaque fois que je trouve un nombre.

donc par exemple si j'ai ceci : af bd ef 45 dff 12 df

j'aimerai obtenir:
- af bd ef
- 45
- dff
-12
-df

Merci d'avance pour vos réponses

A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 28/05/2015 à 20:01
Bonjour,

Il y a plein de manières différentes de faire, en voici une :

String str = "af bd ef 45 dff 12 df";
str = str.replaceAll("(\\D)(\\d)", "$1\n$2");
str = str.replaceAll("(\\d)(\\D)", "$1\n$2");
System.out.println(str);
La confiance n'exclut pas le contrôle
1
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
2 juin 2015 à 10:54
Bonjour KX,

Merci pour ta réponse, mais j'aimerai donc obtenir X String différent, et non simplement mettre des retour chariot.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 juin 2015 à 10:57
Bah, ce n'était pas très clair dans ta question...
Rien ne t'empêche de faire un split("\n") sur la valeur du résultat (et mettre autre chose que \n du coup...)
0
morakevi Messages postés 15 Date d'inscription lundi 30 juillet 2007 Statut Membre Dernière intervention 2 mai 2016 8
2 juin 2015 à 11:02
oui effectivement je peux faire ça. mais il ne serait pas plus propre de faire ça avec une expression régulière ?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 juin 2015 à 18:48
Les replaceAll que j'ai fait (et qui peuvent se simplifier pour mettre les deux en un) ce sont des expressions régulières déjà.
Si tu fais un split la coupure ce fera "forcément" (à vérifier) au détriment d'un groupe de caractères (le \n dans mon exemple) d'où l'intérêt de le rajouter pour mieux l'enlever ensuite.
Après il y a plein d'autres manières de traiter ton problème, mais ce sera majoritairement des solutions à base de boucles (caractère par caractère, sur un Marcher, etc.) alors que la mienne offre une alternative (relativement) simple et concise (même si elle a été choisie sur une mauvaise compréhension de ta question).
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 juin 2015 à 19:21
Si tu fais un split la coupure ce fera "forcément" (à vérifier) au détriment d'un groupe de caractères (le \n dans mon exemple)
Après vérification, on peut faire un split sans consommer aucun caractère.

Ça donne une expression régulière un peu tordue mais ça fonctionne :

String str = "af bd ef 45 dff 12 df";
System.out.println(str);
String[] tab = str.split("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)");
for (String s : tab)
    System.out.println("'"+s+"'");
0