我正在编写一个与由 4 个大写字母组成的 String
匹配的 Pattern
。
例如:
- “AAAA”
- “ABCD”
- “ZZZZ”
...都是正确的匹配,而:
- “1DFG”
- “!@#$”
- “1234”
...应该不匹配。
在下面找到我的代码。
它在“AAAA”上不断返回false
。
有人可以解释一下吗?
public static boolean checkSettings(String str) {
Pattern p = Pattern.compile("\\p{Upper}{4}");
Matcher m = p.matcher("%str".format(str));
if (m.matches()) {
return true;
} else {
// System.exit(1)
return false;
}
}
最佳答案
我认为您的Pattern
没有任何问题,可能您的输入String
有问题。
举个例子:
Pattern p = Pattern.compile("\\p{Upper}{4}");
Matcher m = p.matcher("%str".format("AAAA"));
System.out.println(m.find());
输出:
true
警告
\\p{Upper}{4}
和 \\P{Upper}{4}
不相同模式
,而是一个相反的模式。
第二个实例否定 4 个大写字符(请参阅大写“P”)。我指出这一点是因为您的问题标题表明了错误的模式
。
最后说明
如果您只打算在 Pattern
中使用 ASCII 字母字符,您可能需要使用 [A-Z]
(此处大写字母很重要),正如其他人提到的在这个线程中。它与 \\p{Upper}
完全相同。
与 \\p{Lu}
略有不同,它将匹配 Unicode category为大写字母。
关于java - 这个模式有什么问题: Pattern.编译("\\p{Upper}{4}"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19023393/