2016-07-14 13 views

Antwort

2

Kurze Antwort, nein.

Dies ist gemäß API in der neuesten Java 8 zum Zeitpunkt des Schreibens.

jedoch eine der überladenen StringBuffer Konstruktoren nimmt ein CharSequence als Parameter, und StringBuilder (wie StringBuffer) IS-A CharSequence.

Zum Beispiel:

matcher.appendReplacement(
    new StringBuffer(yourOriginalStringBuilder), "yourReplacement" 
); 
+0

Ausgezeichneter Punkt über 'IS-A'-Beziehung. – kevinarpe

5

Kurze Antwort, noch nicht. Nicht bis Java 9. In Java 9 gibt es Matcher.appendReplacement(StringBuilder,String) und Methoden hinzugefügt zu API.

Bis dahin, wenn Sie keine Gruppe Ersetzungen in Ersatzzeichenfolge müssen dann finde ich diese Lösung auch ‚einfach‘:

Matcher m = PATTERN.matcher(s); 
StringBuilder sb = new StringBuilder(); 
int pos = 0; 
while(m.find()) { 
    sb.append(s, pos, m.start()); 
    pos = m.end(); 
    sb.append("replacement") 
} 
sb.append(s, pos, s.length()); 

Und selbst wenn Sie Gruppe Substitutionen brauchen dann wird es nur ‚mäßig‘ schwierig:

Matcher m = PATTERN.matcher(s); 
StringBuilder sb = new StringBuilder(); 
int pos = 0; 
while(m.find()) { 
    sb.append(s, pos, m.start()); 
    pos = m.end(); 
    if (m.start(1) >= 0) {     // check if group 1 matched 
     sb.append(s, m.start(1), m.end(1)); // replace with group 1 
    } 
} 
sb.append(s, pos, s.length()); 
+0

Crips: Haben Sie den Code für 'Matcher.appendReplacement()' !? Unglaublich, es ist so komplex. – kevinarpe

Verwandte Themen