对于我的生活,我无法弄清楚为什么这个正则表达式不起作用。它应该在给定的字符串中找到大写字母并给我计数。欢迎任何想法。
这是单元测试代码:
public class RegEx {
@Test
public void testCountTheNumberOfUpperCaseCharacters() {
String testStr = "abcdefghijkTYYtyyQ";
String regEx = "^[A-Z]+$";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(testStr);
System.out.printf("Found %d, of capital letters in %s%n", matcher.groupCount(), testStr);
}
}
答案 0 :(得分:16)
它不起作用,因为你有两个问题:
"[A-Z]"
,对于Unicode大写字母应为\p{Lu}
while (matcher.find())
matcher.groupCount()
醇>
正确的代码:
public void testCountTheNumberOfUpperCaseCharacters() {
String testStr = "abcdefghijkTYYtyyQ";
String regEx = "(\\p{Lu})";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(testStr);
while (matcher.find())
System.out.printf("Found %d, of capital letters in %s%n",
matcher.groupCount(), testStr);
}
更新:使用更简单的单行代码来计算字符串中Unicode大写字母的数量:
int countuc = testStr.split("(?=\\p{Lu})").length - 1;
答案 1 :(得分:10)
您没有在匹配器上调用matches
或find
。它没有做任何工作。
getGroupCount
是错误的调用方法。你的正则表达式没有捕获组,即使它没有,它也不会给你字符数。
你应该使用find
,但使用不同的正则表达式,没有锚点。我还建议使用正确的Unicode字符类:"\\p{Lu}+"
。在while (m.find())
循环中使用此功能,并累计每一步从m.group(0).length()
获得的字符总数。
答案 2 :(得分:6)
这应该做你想要的,
@Test
public void testCountTheNumberOfUpperCaseCharacters() {
String testStr = "abcdefghijkTYYtyyQ";
String regEx = "[A-Z]+";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(testStr);
int count = 0;
while (matcher.find()) {
count+=matcher.group(0).length();
}
System.out.printf("Found %d, of capital letters in %s%n", count, testStr);
}
答案 3 :(得分:3)
它应该在给定的字符串中找到大写字母并给我计数。
不,它不应该:^
和$
锚点阻止它这样做,强制查找由完全组成的大写字符的非空字符串
此外,您不能指望未定义组的表达式中的组计数不是零(不匹配)或一个(单个匹配)。
如果您坚持使用正则表达式,请使用没有锚点的简单[A-Z]
表达式,并在循环中调用matcher.find()
。但是,更好的方法是在字符串的字符上调用Character.isUpperCase
并计算命中数:
int count = 0;
for (char c : str.toCharArray()) {
if (Character.isUpperCase(c)) {
count++;
}
}
答案 4 :(得分:1)
您编写的图案在行的开头和结尾之间查找一个或多个大写字母...如果该行中有任何小写字符,则它不会匹配。< / p>
答案 5 :(得分:0)
在这个例子中,我使用正则表达式(正则表达式)来计算给定字符串中使用Java的UpperCase和LowerCase字母的数量。
import java.util.regex.*;
import java.util.Scanner;
import java.io.*;
public class CandidateCode {
public static void main(String args[] ) throws Exception {
Scanner sc= new Scanner(System.in);
// Reads the String of data entered in a line
String str = sc.nextLine();
//counts uppercase letteres in the given String
int countuc = str.split("([A-Z]+?)").length;
//counts lowercase letteres in the given String
int countlc = str.split("([a-z]+?)").length;
System.out.println("UpperCase count: "+countuc-1);
System.out.println("LowerCase count: "+countlc-1);
}
}
答案 6 :(得分:0)
将正则表达式更改为 [A-Z] 检查所有出现的大写字母
请参考以下示例,该示例使用模式
计算字符串中的大写字母数@Test
public void testCountTheNumberOfUpperCaseCharacters() {
Pattern ptrn = Pattern.compile("[A-Z]");
Matcher matcher = ptrn.matcher("ivekKVVV");
int from = 0;
int count = 0;
while(matcher.find(from)) {
count++;
from = matcher.start() + 1;
}
System.out.println(count);
}
}
答案 7 :(得分:0)