如何知道这个Java的string.replaceAll是否被执行?

时间:2012-10-05 13:27:04

标签: java replaceall

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

String s = "This is a string";

现在我执行此操作:

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

它有效,s =“什么是字符串”

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

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

s仍然保持原样,即s = "This is a string";


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

3 个答案:

答案 0 :(得分:4)

如果你尝试

就可以了
if(s.contains("junk")) 
  s.replaceAll("junk", "What"); 
else 
  //you know it hasn't executed!

答案 1 :(得分:1)

你问的是除了使用s.equals(...)之外是否还有其他方法,那么答案就是没有。

如果没有更改任何字符,则javadoc不会声明replaceAll将返回目标对象,因此即使它确实应该将其视为实现细节;如果你关心可移植性,== 不应该用作捷径。


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

答案 2 :(得分:0)

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