Страницы

Поиск по вопросам

среда, 29 января 2020 г.

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

#char #java #строки


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


Ответы

Ответ 1



Регулярные выражения вас спасут. Если вы хотите по букве проверять, нужно использовать к строке с буквой метод str.matches("A-Z"), что даст логическое true, если символ есть большая буква. Немного пошаманив с регулярным выражением, можно написать и для проверки целой строки, но тут надо учитывать все возможные варианты. Проще - побуквенно. Есть ещё вариант - создать вторую строку через: String str2 = str1.toLowerCase(); и потом сравнить строки. Если будет несовпадение - где-то есть большие буквы, но этот вариант подходит, только если нужен сам факт наличия больших букв. Есть оракловая документация по регулярным выражениям, правда, на английском.

Ответ 2



Есть такой статический метод Character.isUpperCase(char); он сам проверяет буква ли это, и неважно какого алфавита. Как-то так String str="teststrinG123OPIvaaaav"; boolean result=false; char[] array=str.toCharArray(); for(char x:array){ if(Character.isUpperCase(x)){ result=true; break; } }

Ответ 3



Еще вариант с новыми 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(); } }

Ответ 4



Эх вы... Все же просто, надо всю строку перевести в lowerCase и сравнить с исходной строкой. Если строки идентичны, значит все символы были маленькие, иначе хотя бы одна была большая: boolean isAnyUpperCase(String s) { if(s.equals(s.toLowerCase())) return false; return true; } P.S. Regexp'ы и проч. LinQ - в данном контексте это зло

Ответ 5



Guava: CharMatcher.JAVA_UPPER_CASE.matchesAnyOf("abC"); // true CharMatcher.JAVA_UPPER_CASE.matchesAnyOf("abc"); // false

Ответ 6



На самом деле у каждого символа только 1 бит отвечает за регистр, можно только его и проверять(Если нужен только английский алфавит например)... Это и будет самый быстрый путь

Комментариев нет:

Отправить комментарий