if("test%$@*)$(%".matches("[^a-zA-Z\\.]"))
System.exit(0);
if("te/st.txt".matches("[^a-zA-Z\\.]"))
System.exit(0);
即使正则表达式应该返回 true,程序也没有退出。代码有什么问题?
最佳答案
匹配
仅当正则表达式匹配整个字符串 时返回true
。在您的情况下,您的正则表达式仅代表一个 字符,不是a-z
、A-Z
或。
。
我怀疑您想检查字符串是否包含您在正则表达式中描述的这些特殊字符之一。在这种情况下,用 .*
包围您的正则表达式,让正则表达式匹配整个字符串。哦,您不必在字符类 [.]
中转义 .
。
if ("test%$@*)$(%".matches(".*[^a-zA-Z.].*")) {
//string contains character that is not in rage a-z, A-Z, or '.'
但是如果你关心性能,你可以使用 Matcher#find()
方法
可以在找到包含正则表达式匹配项的子字符串时返回
true
。这样,应用程序将不需要检查其余文本,剩余文本越长,我们就越能节省时间。不会强制我们在每次调用
String#matches(regex)
时都不断地构建 Pattern 对象,因为我们可以创建一次 Pattern 并在不同的数据中重用它。
演示:
Pattern p = Pattern.compile("[^a-zA-Z\\.]");
Matcher m = p.matcher("test%$@*)$(%");
if(m.find())
System.exit(0);
//OR with Matcher inlined since we don't really need that variable
if (p.matcher("test%$@*)$(%").find())
System.exit(0);
关于java - 为什么 String.matches 在 Java 中返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165485/