В качестве дополнительной информации (для вашей учебной цели) вы можете решить ее различными способами, используя:
- лямбда,
- 'classic' for loop,
- конструкция цикла, представленная в Java 7,
- , регулярное выражение,
- или цикл forEach
Каждый из этих способов имеет свои преимущества или недостатки.
С лямбдой
public static long countUpperCase(final String str) {
return str
.chars() // get all chars from the argument
.filter(c -> Character.isUpperCase(c)) // filter only the uppercase
.count(); // count the uppercase
}
С классическим для петли
public static long countUpperCase(final String str) {
long counter = 0;
for(int i=0; i<str.length(); i++) {
if(Character.isUpperCase(str.charAt(i))) {
counter++;
}
}
return counter;
}
С новой конструкцией петли(Java 7 или выше)
public static long countUpperCase(final String str) {
long counter = 0;
for(final char c: str.toCharArray()) {
if(Character.isUpperCase(c)) {
counter++;
}
}
return counter;
}
В других сообщениях уже есть некоторые объяснения, например, Прописная запись SO
С регулярным выражением
public static long countUpperCase(final String str) {
// \p{L} matches a single code point in the category "letter"
// \p{L} matches all letters that are uppercase
return str.split("(?=\\p{Lu})").length;
}
Если вам интересно покопаться немного глубже, взгляните на этот интересный PDF: Руководство по регулярному выражению
Сцикл forEach
public static long countUpperCase(final String str) {
// the 'var' keyword can be used with Java 10 or higher
final var counter = new AtomicInteger(0);
// convert a string into a List<Character>
// Note that this is only applicable since Java 8 or higher
var chars = str
.chars()
.mapToObj(c -> (char) c)
.collect(Collectors.toList());
// count the number of uppercase letters
chars.forEach(c -> {
if(Character.isUpperCase(c)) {
counter.incrementAndGet();
}
});
return counter.get();
}