Quelle est l'expression régulière pour replaceAll()
fonction pour remplacer "N/A" avec "0"?java replaceAll()
: N/A
sortie: 0
Quelle est l'expression régulière pour replaceAll()
fonction pour remplacer "N/A" avec "0"?java replaceAll()
: N/A
sortie: 0
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");
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");
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" : "");
où 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
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
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
L'API Java décrit le premier argument en tant qu'expression régulière. D'où la forme de la question. – SteveT
@SteveT: Oui, mais mon point est qu'il n'y a pas besoin d'utiliser 'replaceAll'. –
Ah - merci. Je n'ai pas remarqué la méthode différente que vous avez suggérée. C'est bon à savoir. – SteveT