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

时间:2017-07-01 10:38:40

标签: java matcher replaceall

你好: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 ...所以如果它是相同的话我就不是shure了)

1 个答案:

答案 0 :(得分:1)

在Matcher案例中,你正在做一些不必要的额外工作,但它仍然有效地做同样的事情(但我会假设你支付效率价格,但在这种情况下它可以忽略不计)。

在第一种情况下,您执行geb。所以你要说的是geb.replaceAll("\\.", Matcher.quoteReplacement(sep)),并用“没有”取代每个时期。

在第二种情况下,您执行geb。现在,你要说的是,取geb.replaceAll("[\\-\\,\\.\\s]", "");并用Matcher.quoteReplacement(“”)的返回值替换每个句点。在这种情况下,Matcher.quoteReplacement返回“”,正是你输入的内容。所以它本质上是一个不需要的额外/无用的呼叫。在这里查看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来抑制控制字符的特殊含义,如“\”和“$”。所以你只需要使用它,如果你想要替换String(replaceAll的第二个参数)就好像那些是文字字符而不是控制字符。

另外值得注意的是,您可以在{{1}}这样的正则表达式中完成所有操作。我认为还有比这更好的方法,但我的正则表达不是很好。