2009-07-07 9 views
2

Quelle est l'expression régulière pour replaceAll() fonction pour remplacer "N/A" avec "0"?java replaceAll()

entrée

: N/A
sortie: 0

Répondre

14

supposant s est un String.

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

Vous n'avez même pas besoin d'expressions régulières pour cela. Cela suffira:

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

Pourquoi utiliser une expression régulière? Si vous n'avez pas besoin d'un modèle, il suffit d'utiliser replace:

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

L'API Java décrit le premier argument en tant qu'expression régulière. D'où la forme de la question. – SteveT

+1

@SteveT: Oui, mais mon point est qu'il n'y a pas besoin d'utiliser 'replaceAll'. –

+0

Ah - merci. Je n'ai pas remarqué la méthode différente que vous avez suggérée. C'est bon à savoir. – SteveT

0

Vous pouvez essayer un code plus rapide. Si la chaîne ne contient que N/A:

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

si la chaîne contient plusieurs N/A:

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

join() est la méthode:

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(); 
} 

il est deux fois

+0

Je suppose que votre code fonctionne correctement, mais qu'est-ce qui vous fait penser qu'appeler 'split()' plus 'join()' est plus rapide que 'replace()' ou regex? – Nayuki

+0

J'ai testé sur de grands ensembles de données. Malheureusement, le test a été perdu. Je pense que vous pouvez faire un nouveau test dans la nouvelle version de Java. Ce sera intéressant de voir le résultat. Je serai heureux de vous aider. – Koss