replaceAll() 与 replaceAll(..., Matcher.quoteReplacement)

replaceAll() vs. replaceAll(..., Matcher.quoteReplacement)

你好:D 简短的问题:

有什么区别
String geb = tf_datum.getText();
String sep = ""; //sep is short for seperator

geb = geb.replaceAll("\.", sep);
geb = geb.replaceAll("\,", sep); 
geb = geb.replaceAll("\-", sep);
geb = geb.replaceAll("\ ", sep);`

String geb = tf_datum.getText();

String sep = "";
geb = geb.replaceAll("\.", Matcher.quoteReplacement(sep));
geb = geb.replaceAll("\,", Matcher.quoteReplacement(sep)); 
geb = geb.replaceAll("\-", Matcher.quoteReplacement(sep));
geb = geb.replaceAll("\ ", Matcher.quoteReplacement(sep)); 

因为两者都在运作。我试图理解每种方法(在第二种方法中)并将其组合在一起,但没有任何意义。 如果有人可以帮助我,那就太好了! 谢谢。 :)(我还发现了另一个问题 which seems to be the same,但他没有在 replaceAll() 内部使用 Matcher.quote ...所以我不确定它是否相同)

在 Matcher 的情况下,你做了一些不必要的额外工作,但它仍然有效地做了同样的事情(但我假设你付出了效率代价,尽管在这种情况下它可以忽略不计)。

在第一种情况下,你做 geb.replaceAll("\.", "")。所以你说的是 geb,基本上用 'nothing' 替换每个句点。

在第二种情况下,你做geb.replaceAll("\.", Matcher.quoteReplacement(sep))。现在,您是说,取 geb 并将每个句点替换为 Matcher.quoteReplacement("")) 的 return 值。在本例中,Matcher.quoteReplacement returns "",正是您放入其中的内容。所以它本质上是一个不需要的 extra/useless 调用。在此处查看 Matcher.quoteReplacement 的文档:

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#quoteReplacement(java.lang.String)

这里 String.replaceAll:

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)

这里提到的一件事是使用 quoteReplacement 来抑制控制字符的特殊含义,如“\”和“$”。因此,如果您希望替换字符串(replaceAll 的第二个参数)的行为就像是文字字符而不是控制字符,则只需使用它。

另外请注意,您可以像 geb.replaceAll("[\-\,\.\s]", ""); 这样在一个正则表达式中完成所有这些操作。我认为还有比这更好的方法,但我的正则表达式不是很好。