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 的文档:
这里 String.replaceAll:
这里提到的一件事是使用 quoteReplacement 来抑制控制字符的特殊含义,如“\”和“$”。因此,如果您希望替换字符串(replaceAll 的第二个参数)的行为就像是文字字符而不是控制字符,则只需使用它。
另外请注意,您可以像 geb.replaceAll("[\-\,\.\s]", "");
这样在一个正则表达式中完成所有这些操作。我认为还有比这更好的方法,但我的正则表达式不是很好。
你好: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 的文档:
这里 String.replaceAll:
这里提到的一件事是使用 quoteReplacement 来抑制控制字符的特殊含义,如“\”和“$”。因此,如果您希望替换字符串(replaceAll 的第二个参数)的行为就像是文字字符而不是控制字符,则只需使用它。
另外请注意,您可以像 geb.replaceAll("[\-\,\.\s]", "");
这样在一个正则表达式中完成所有这些操作。我认为还有比这更好的方法,但我的正则表达式不是很好。