你好: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了)
答案 0 :(得分:1)
在Matcher案例中,你正在做一些不必要的额外工作,但它仍然有效地做同样的事情(但我会假设你支付效率价格,但在这种情况下它可以忽略不计)。
在第一种情况下,您执行geb
。所以你要说的是geb.replaceAll("\\.", Matcher.quoteReplacement(sep))
,并用“没有”取代每个时期。
在第二种情况下,您执行geb
。现在,你要说的是,取geb.replaceAll("[\\-\\,\\.\\s]", "");
并用Matcher.quoteReplacement(“”)的返回值替换每个句点。在这种情况下,Matcher.quoteReplacement返回“”,正是你输入的内容。所以它本质上是一个不需要的额外/无用的呼叫。在这里查看Matcher.quoteReplacement的文档:
对于String.replaceAll:
这里提到的一件事是使用quoteReplacement来抑制控制字符的特殊含义,如“\”和“$”。所以你只需要使用它,如果你想要替换String(replaceAll的第二个参数)就好像那些是文字字符而不是控制字符。
另外值得注意的是,您可以在{{1}}这样的正则表达式中完成所有操作。我认为还有比这更好的方法,但我的正则表达不是很好。