Splitting chaine de caractère java [Résolu/Fermé]

Signaler
-
Messages postés
15
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
2 mai 2016
-
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

1 réponse

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
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...)
Messages postés
15
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
2 mai 2016
8
oui effectivement je peux faire ça. mais il ne serait pas plus propre de faire ça avec une expression régulière ?
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
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).
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
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+"'");
Messages postés
15
Date d'inscription
lundi 30 juillet 2007
Statut
Membre
Dernière intervention
2 mai 2016
8 >
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021

Merci pour ta réponse, c'est vrai que l'expression régulière est un peu tordue mais c'était ce que je cherchait.

Merci pour tes réponses