如果我有一些字符串,例如:
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是否真的执行了某些操作?
答案 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
方法来确定是否会发生任何替换。但这实际上取决于你希望如何使用它。你为什么不想首先比较字符串?