Как узнать, есть ли в строке большие буквы?

Рейтинг: 3Ответов: 4Опубликовано: 14.12.2014

Как это можно реализовать? Единственная идея, которая сейчас есть, - разбить строку на символы и далее каждый символ проверять на буква ли это, если да, то потом проверять не большая ли.

Мне кажется, что это будет как-то не совсем корректно и должны быть более красивые решения, что ли.

Ответы

▲ 4Принят

Регулярные выражения вас спасут. Если вы хотите по букве проверять, нужно использовать к строке с буквой метод str.matches("A-Z"), что даст логическое true, если символ есть большая буква.

Немного пошаманив с регулярным выражением, можно написать и для проверки целой строки, но тут надо учитывать все возможные варианты. Проще - побуквенно.

Есть ещё вариант - создать вторую строку через:

String str2 = str1.toLowerCase();

и потом сравнить строки. Если будет несовпадение - где-то есть большие буквы, но этот вариант подходит, только если нужен сам факт наличия больших букв.

Есть оракловая документация по регулярным выражениям, правда, на английском.

▲ 6

Есть такой статический метод Character.isUpperCase(char); он сам проверяет буква ли это, и неважно какого алфавита. Как-то так

String str="teststrinG123OPIvaaaav";
        boolean result=false;
        char[] array=str.toCharArray();
        for(char x:array){
            if(Character.isUpperCase(x)){
                result=true;
                break;
        }
}
▲ 2

Еще вариант с новыми Stream в JDK 8

public class UpperCaseTest {
    public static void main(String[] args) {
        String someupper = "this string Contains Some Uppercase Chars";
        String alllower = "this string contains no uppercase chars";
        System.out.println(containsUppercase(someupper));
        System.out.println(containsUppercase(alllower));
    }

    private static boolean containsUppercase(String str) {
        return str.codePoints().filter(Character::isUpperCase)
            .findFirst().isPresent();
    }
}
▲ 2

Эх вы... Все же просто, надо всю строку перевести в lowerCase и сравнить с исходной строкой. Если строки идентичны, значит все символы были маленькие, иначе хотя бы одна была большая:

boolean isAnyUpperCase(String s) {
   if(s.equals(s.toLowerCase()))
     return false;
   return true;
}

P.S. Regexp'ы и проч. LinQ - в данном контексте это зло