我正在写一个Pattern
匹配一个String
,由4个大写字母组成。
例如:
...都是正确的匹配,而:
...应该不匹配。
在下面找到我的代码。
它一直在“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;
}
}
答案 0 :(得分:4)
我认为您的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}
不相同Pattern
,而是彼此相反。
第二个实例否定4个大写字符(参见大写“P”)。我指出了这一点,因为你的问题标题表明错误Pattern
。
最后的注释
如果您只打算为Pattern
使用ASCII字母字符,则可能需要使用[A-Z]
(此处大写重要),如此线程中的其他人所述。它与\\p{Upper}
完全相同。
与\\p{Lu}
略有不同,后者与大写字母的Unicode category相匹配。
答案 1 :(得分:0)
将您的模式更改为:
Pattern p = Pattern.compile("[A-Z]{4}");
将您的匹配器更改为:
Matcher m = p.matcher(str);
答案 2 :(得分:0)
您的代码应该提供正确的结果如果您确实传递了AAAA
。
但是你应该像这样重写你的代码:
public static boolean checkSettings(String str) {
Pattern p = Pattern.compile("\\p{Upper}{4}");
Matcher m = p.matcher(String.format(str));
return m.matches();
}
甚至
public static boolean checkSettings(String str) {
return str.matches("\\p{Upper}{4}");
}
这些示例与您的代码大致相同。我刚测试了它,它会为true
返回AAAA
。