2009-07-07 13 views
2

Was ist der reguläre Ausdruck für replaceAll() Funktion zu ersetzen "N/A" mit "0"?java replaceAll()

input: N/A
output: 0

Antwort

14

Unter der Annahme, s eine String ist.

s.replaceAll("N/A", "0"); 

Sie brauchen nicht einmal reguläre Ausdrücke dafür. Dies genügt:

s.replace("N/A", "0"); 
8

Warum überhaupt einen regulären Ausdruck verwenden? Wenn Sie nicht über ein Muster benötigen, verwenden Sie nur replace:

String output = input.replace("N/A", "0"); 
+0

Die Java-API beschreibt das erste Argument als regulären Ausdruck. Daher die Form der Frage. – SteveT

+1

@SteveT: Ja, aber mein Punkt ist, dass es keine Notwendigkeit gibt, 'replaceAll' zu verwenden. –

+0

Ah - danke. Ich habe die von Ihnen vorgeschlagene andere Methode nicht bemerkt. Das ist gut zu wissen. – SteveT

0

Sie können einen schnelleren Code versuchen. Wenn die Zeichenkette enthält nur N/A:

return str.equals("N/A") ? "0" : str; 

wenn Zeichenfolge enthält mehrere N/A:

return join(string.split("N/A"), "0") 
      + (string.endsWith("N/A") ? "0" : ""); 

wo join() ist Methode:

private String join(String[] split, String string) { 
    StringBuffer s = new StringBuffer(); 
    boolean isNotFirst = false; 
    for (String str : split) { 
     if (isNotFirst) { 
      s.append(string); 
     } else { 
      isNotFirst = true; 
     } 
     s.append(str); 
    } 
    return s.toString(); 
} 

es zweimal so schnell

+0

Ich gehe davon aus, dass Ihr Code korrekt funktioniert, aber was bringt Sie auf den Gedanken, dass das Aufrufen von 'split()' plus 'join()' schneller ist als 'replace()' oder regex? – Nayuki

+0

Ich habe an großen Datensätzen getestet. Leider war der Test verloren. Ich denke, dass Sie in der neuen Version von Java einen neuen Test machen können. Es wird interessant sein, das Ergebnis zu sehen. Ich werde froh sein, Ihnen zu helfen. – Koss

Verwandte Themen