Salut,
Savez vous comment je peux faire avec replaceall(monexpr,manouvelleexpr) par exemple pour que si
monexpr="50"
manouvelleexpr="60" ( j'ajoute +10 (operation arithmétique))
?
thks
Salut,
Savez vous comment je peux faire avec replaceall(monexpr,manouvelleexpr) par exemple pour que si
monexpr="50"
manouvelleexpr="60" ( j'ajoute +10 (operation arithmétique))
?
thks
Salut,
replaceAll() n'est pas fait pour cela.
Si tu dois faire une opération arithmétique, il faut que tu convertisses ta chaine en valeur numérique.
a++
J'ai essayé ça mais ça ne marche pas quelle solution je peux faire poru remplacer le replaceall sinon ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public static String modif(String test) { int newchaine = Integer.parseInt(test) + 10; return new String(newchaine); } String ancien="(50)(nano)"; line.replaceAll(ancien,modif("$1"));
Pour transformer un int en String il faut utiliser Integer.toString() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public static String modif(String test) { int newchaine = Integer.parseInt(test) + 10; return Integer.toString(newchaine); }
a++
Merci.
Mais ça ne veut pas marcher :-/
Message d'erreur: Exception in thread "main" java.lang.NumberFormatException: For input string: "$1"
ça ne prend pas en compte le groupe 1 de la regex
C'est normal "$1" n'est pas un nombre entier correct... Tu dois lui passer le nombre à remplacer et non pas "$1".
Mais je viens juste de comprendre que tu voulais faire un remplacement d'une sous-chaine d'où le replaceAll().
Dans ce cas il va falloir recoder le replaceAll() car ce dernier est limité et tu ne peux pas faire de transformation sur la chaine.
Heureusement c'est assez simple et tu peux utiliser le code suivant :
L'interface Replacement permet de transformer chaque sous-chaine comme bon te semble.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public interface Replacement { public String replace(MatchResult match); } public static String replaceAll(String input, Pattern pattern, Replacement replacement) { Matcher m = pattern.matcher(input); if (m.find()) { // Il y a au moins 1 élément à remplacer // On doit passer par une chaine intermédiaire StringBuffer sb = new StringBuffer(input.length()); do { // On remplace chaque élément : String rempl = replacement.replace(m.toMatchResult()); m.appendReplacement(sb, rempl); } while (m.find()); // On recopie la fin de chaine : m.appendTail(sb); return sb.toString(); } // Sinon il n'y a aucun changement : return input; }
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 String ancien="(50)(nano)"; String nouveau = replaceAll(ancien, Pattern.compile("\\d+"), new Replacement() { @Override public String replace(MatchResult match) { String value = match.group(); int intValue = Integer.parseInt(value); return Integer.toString(intValue + 10); } }); System.out.println(nouveau);
a++
Partager