1

如果我有一些字符串,例如:

String s = "This is a string";

现在我执行此操作:

s = s.replaceAll("This","What");

它的工作原理是 s = "What is a string"

很好,但现在如果表达式不匹配:

s = s.replaceAll("junk","What");

s 仍然是以前的样子,即s = "This is a string";


我想知道,在不等同于这些字符串的情况下,有没有办法知道 s.replaceAll 是否真的执行了某些操作?

4

3 回答 3

4

你试试可以吗

if(s.contains("junk")) 
  s.replaceAll("junk", "What"); 
else 
  //you know it hasn't executed!
于 2012-10-05T13:32:41.220 回答
1

你是在问是否有除了 using 之外的其他方法s.equals(...),那么答案是否定的。

javadoc 没有说明replaceAll如果没有更改任何字符将返回目标对象,因此即使这样做也应该被视为实现细节;ie如果您关心可移植性,== 则不应将其用作捷径。


当然,您可以测试匹配正则表达式是否与原始字符串匹配,并使用它来确定是否会执行替换。但是,即使您知道发生了替换,也不能告诉您替换操作是否实际更改了字符串。(并且确定这很难......如果您需要考虑替换字符串包含组引用的情况。)

于 2012-10-05T13:33:52.913 回答
0

由于在屏幕后面replaceAll使用Pattern.compile(regex).matcher(str).replaceAll(repl),您可以使用一些Matcher方法来确定是否会发生任何替换。但这实际上取决于您希望如何使用它。你为什么不想一开始就比较字符串?

于 2012-10-05T13:34:19.590 回答