如何计算 Java 中字符串中的大写单词?
How to count uppercase words in a string in Java?
我需要计算一个字符串中大写单词的总数,但如果不涉及复杂的 if 语句和检查,我不知道该怎么做。
我试过写下这样的东西:
private int uppercaseWordsCount(String input){
count = 0;
String[] ss = input.split("\s");
for (String s: ss){
//???
}
}
return count;
}
而且我仍然不知道有什么好的条件可以满足我的需要。问题是我必须处理整个单词(出于该方法的目的,像感叹号这样的特殊字符算作大写字符)而不是单个字符,因为我正在编写的系统的其余部分已经这样做了。
您可以通过 split()
调用拆分每个字符串,就像您当前正在做的那样,以获得每个单词。此时,您可以选择如何处理比较每个单词以确定它们是否大写。
将您的字符串与大写版本进行比较
您还可以使用 toUpperCase()
方法将字符串与其对应的大写字母进行比较,并相应地递增
// The string is the same as an upper-cased version of itself
if(s.equals(s.toUpperCase())){
// Then increment your count
count++;
}
根据正则表达式检查字符串
您还可以使用正则表达式通过 matches()
方法查看字符串中的所有字符是否均为大写:
// Increment your count if the string consists of only uppercase characters
if(s.matches("^[A-Z]+$")){
count++;
}
这是使用 java 8
的方法
public static long countUpperCaseWord(String input) {
// your object must be not null
Objects.requireNonNull(input);
// new stream of the array returned by the split call on input string
return Stream.of(input.split("\s"))
// we create a second stream that match the predicate passed throw the method filter
.filter(word -> word.equals(word.toUpperCase()))
// finally we want to count how many words match this predicate
.count();
}
如果需要在条目中计算大写字母:
public static long countUpperCase(String input) {
return input.chars()
.map(i -> (char) i)
.filter(c -> Character.isUpperCase(c))
.count();
}
如果您想使用更多泛型代码来改进它,您可以这样写:
public static long countWordsUsingPredicate(String input, Predicate<String> predicate) {
Objects.requireNonNull(input);
return Stream.of(input.split("\s"))
.filter(predicate)
.count();
}
并通过将谓词作为 lambda 表达式传递给方法来调用此 util 方法:
countUpperCaseWord("THIS BREAK", word -> word.equals(word.toUpperCase()))
简单的方法是定义您的 "upper case word pattern",然后根据它计算匹配项:
Pattern pattern = Pattern.compile("\b[A-Z\!\@$\%\^\&\*\(\)\[\]]\S+\b");
Matcher matcher = pattern.matcher("Your Input String Here");
int count = 0;
while (matcher.find()) { count++; }
System.out.printf("%d uppercase words.%n", count);
我需要计算一个字符串中大写单词的总数,但如果不涉及复杂的 if 语句和检查,我不知道该怎么做。
我试过写下这样的东西:
private int uppercaseWordsCount(String input){
count = 0;
String[] ss = input.split("\s");
for (String s: ss){
//???
}
}
return count;
}
而且我仍然不知道有什么好的条件可以满足我的需要。问题是我必须处理整个单词(出于该方法的目的,像感叹号这样的特殊字符算作大写字符)而不是单个字符,因为我正在编写的系统的其余部分已经这样做了。
您可以通过 split()
调用拆分每个字符串,就像您当前正在做的那样,以获得每个单词。此时,您可以选择如何处理比较每个单词以确定它们是否大写。
将您的字符串与大写版本进行比较
您还可以使用 toUpperCase()
方法将字符串与其对应的大写字母进行比较,并相应地递增
// The string is the same as an upper-cased version of itself
if(s.equals(s.toUpperCase())){
// Then increment your count
count++;
}
根据正则表达式检查字符串
您还可以使用正则表达式通过 matches()
方法查看字符串中的所有字符是否均为大写:
// Increment your count if the string consists of only uppercase characters
if(s.matches("^[A-Z]+$")){
count++;
}
这是使用 java 8
的方法public static long countUpperCaseWord(String input) {
// your object must be not null
Objects.requireNonNull(input);
// new stream of the array returned by the split call on input string
return Stream.of(input.split("\s"))
// we create a second stream that match the predicate passed throw the method filter
.filter(word -> word.equals(word.toUpperCase()))
// finally we want to count how many words match this predicate
.count();
}
如果需要在条目中计算大写字母:
public static long countUpperCase(String input) {
return input.chars()
.map(i -> (char) i)
.filter(c -> Character.isUpperCase(c))
.count();
}
如果您想使用更多泛型代码来改进它,您可以这样写:
public static long countWordsUsingPredicate(String input, Predicate<String> predicate) {
Objects.requireNonNull(input);
return Stream.of(input.split("\s"))
.filter(predicate)
.count();
}
并通过将谓词作为 lambda 表达式传递给方法来调用此 util 方法:
countUpperCaseWord("THIS BREAK", word -> word.equals(word.toUpperCase()))
简单的方法是定义您的 "upper case word pattern",然后根据它计算匹配项:
Pattern pattern = Pattern.compile("\b[A-Z\!\@$\%\^\&\*\(\)\[\]]\S+\b");
Matcher matcher = pattern.matcher("Your Input String Here");
int count = 0;
while (matcher.find()) { count++; }
System.out.printf("%d uppercase words.%n", count);