我想只使用正则表达式
Raida => true
raida => false
raiDa => true
我试过这个:
String string = "Raida"
boolean bool = string.contains("?=.*[A-Z]");
System.out.println(bool);
但它不起作用
答案 0 :(得分:3)
一个简单的解决方案是:
boolean hasUpperCase = !string.equals(string.toLowerCase());
将String转换为小写,如果它等于原始字符串,则它不包含任何大写字母。
在您的示例Raida
中,您将成为
Raida
到raida
这两个不相等所以意味着原始字符串包含大写字母
答案 1 :(得分:3)
接近你原来想法的东西。你基本上只是检查字符串中是否有一个包含大写字母的部分 - 在它之前和之后可以有任何其他字符。这里我包含了一个用于测试目的的小型主要方法。
public static void main(String[] args) {
test("raid");
test("raId");
test("Raida");
test("R");
test("r");
test(".");
test("");
}
public static void test(String word) {
//(?s) enables the DOTALL mode
System.out.println(word + " -> " + word.matches("(?s).*[A-Z].*"));
}
我编辑了这个例子来处理换行符。我刚刚在Windows机器上测试过。现在使用DOTALL:https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#DOTALL。在这种模式下,表达式。匹配任何字符,包括行终止符。
答案 2 :(得分:1)
正式表达式解决方案的答案已经发布,以及许多其他相当方便的选项。我还建议在这里使用Java 8 API。它可能不是性能方面的最佳选择,但它大大简化了代码。解决方案可以写在一行中:
string.chars().anyMatch(Character::isUpperCase);
此解决方案的好处是可读性。目的很明确。即使你想逆转它。
答案 3 :(得分:0)
您可以替换所有非UpperLetter并计算长度,如果它大于或等于1,则表示至少有一个大写字母:
String input = "raiDa";
boolean check = input.replaceAll("[^A-Z]", "").length() >= 1;
在String::contain
旁边不使用正则表达式阅读documentation
答案 4 :(得分:0)
您的模式只需要被()
包围。
Pattern pattern = Pattern.compile("(?=.*[A-Z])");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
bool = true;
}
如果您想要替代regex
,请尝试使用Character.isUpperCase()
。
boolean bool = false;
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if (Character.isUpperCase(c)) {
bool = true;
break;
}
}
System.out.println(bool);