2010-06-03 26 views
0

J'ai ce codeComment remplacer un groupe d'expressions rationnelles par une valeur post-traitement?

public static String ProcessTemplateInput(String input, int count) { 
     Pattern pattern = Pattern.compile("\\{([^\\}]+)\\}"); 
     Matcher matcher = pattern.matcher(input); 
     while (matcher.find()) { 
      String newelem=SelectRandomFromTemplate(matcher.group(1), count); 
     } 
     return input; 
    } 

entrée est:

String s1 = "planets {Sun|Mercury|Venus|Earth|Mars|Jupiter|Saturn|Uranus|Neptune}{?|!|.} Is this ok? "; 

Exemple de sortie:

String s2="planets Sun, Mercury. Is this ok? "; 

Je voudrais remplacer l'ensemble {} de modèles avec la valeur choisi retournée par la méthode. Comment est-ce que je fais cela dans Java1.5?

Répondre

3

utilisation appendReplacement/appendTail:

StringBuffer output = new StringBuffer(); 
while (matcher.find()) { 
    matcher.appendReplacement(output, SelectRandomFromTemplate(matcher.group(1), count)); 
} 
matcher.appendTail(output); 
return output.toString(); 
+0

+1; l'un des rares endroits où j'utiliserais 'StringBuffer'. – polygenelubricants

+0

Java 7 va enfin permettre l'utilisation de StringBuilder pour cela. –