2011-07-20 3 views
0

j'ai besoin de transformer quelque chose comme: "foo_bar_baz_2"-"fooBarBaz2"remplacer tous les groupes capturés

Je suis en train d'utiliser ce modèle:

Pattern pattern = Pattern.compile("_([a-z])"); 
Matcher matcher = pattern.matcher("foo_bar_baz_2"); 

Est-il possible d'utiliser matcher pour remplacer le premier groupe capturé (la lettre après le '_') avec le groupe capturé en majuscules?

+0

Oui, il est possible (je suppose que quelqu'un qui connaît Java mieux que moi peux aussi vous dire comment). Je voulais simplement souligner que l'utilisation de cette regex, vous obtiendrez 'fooBarBaz_2' parce que [a-z]' ne correspond pas '2'. –

Répondre

3

Vous pouvez utiliser appendReplacement/méthodes appendTail du matcher comme ceci:

Pattern pattern = Pattern.compile("_([a-z0-9])"); 
Matcher matcher = pattern.matcher("foo_bar_baz_2"); 

StringBuffer stringBuffer = new StringBuffer(); 
while(matcher.find()) { 
    matcher.appendReplacement(stringBuffer, matcher.group(1).toUpperCase()); 
} 
matcher.appendTail(stringBuffer); 

System.out.println(stringBuffer.toString()); 
3

Oui. Remplacer par \U$1\E - représentée comme en Java chaîne "\\U$1\\E"

Tant qu'il n'y a rien d'autre dans votre regex, vous pouvez vider le \E et raccourcir à \U$1.


Prendre @ commentaire de TimPietzcker en compte, votre regex lui-même devrait être "_([a-z0-9])".

1
StringBuffer sb = new StringBuffer(); 
while (matcher.find()) { 
    matcher.appendReplacement(sb, matcher.group(1).toUpperCase()); 
} 
matcher.appendTail(sb); 
Questions connexes