Подтвердить что ты не робот

Есть ли существующий метод библиотеки, который проверяет, является ли String все верхним регистром или строчным регистром в Java?

Я знаю, что в Java есть много методов upper() и других фреймворков, таких как Apache commons lang, которые преобразуют String во весь верхний регистр.

Существуют ли какие-либо общие библиотеки, которые предоставляют метод типа isUpper(String s) и isLower(String s), чтобы проверить, являются ли все символы в строке строчными или строчными?

EDIT:

Много хороших ответов о преобразовании в Upper и сравнении с этим. Думаю, я должен был быть более конкретным и сказал, что я уже думал об этом, но я надеялся, что смогу использовать существующий метод для этого.

Хороший комментарий о возможном включении этого в apache.commons.lang.StringUtils. Кто-то даже представил патч (20090310). Надеюсь, мы скоро это увидим. https://issues.apache.org/jira/browse/LANG-471

EDIT:

Для чего мне нужен этот метод, нужно было использовать названия отелей, которые иногда приходили во все прописные буквы. Я только хотел загладить их, если они были все ниже или в верхнем регистре. Я столкнулся с проблемами с символами без буквы, упомянутыми в некоторых сообщениях, и в итоге сделал что-то вроде этого:

private static boolean isAllUpper(String s) {
    for(char c : s.toCharArray()) {
       if(Character.isLetter(c) && Character.isLowerCase(c)) {
           return false;
        }
    }
    return true;
}

Это обсуждение и различные решения (с различными проблемами) ясно показывают, что существует потребность в хорошем твердотельном методе AllUpper (String s) в commons.lang

До тех пор я предполагаю, что myString.toUpperCase().equals(myString) - лучший способ пойти.

4b9b3361

Ответ 1

Guava CharMatchers, как правило, предлагают очень выразительные и эффективные решения этой проблемы.

CharMatcher.javaUpperCase().matchesAllOf("AAA"); // true
CharMatcher.javaUpperCase().matchesAllOf("A SENTENCE"); // false
CharMatcher.javaUpperCase().or(CharMatcher.whitespace()).matchesAllOf("A SENTENCE"); // true
CharMatcher.javaUpperCase().or(CharMatcher.javaLetter().negate()).matchesAllOf("A SENTENCE"); // true
CharMatcher.javaLowerCase().matchesNoneOf("A SENTENCE"); // true

Статический импорт для com.google.common.base.CharMatcher.* может помочь сделать их более краткими.

javaLowerCase().matchesNoneOf("A SENTENCE"); // true

Ответ 3

К сожалению, нет функции библиотеки, но довольно легко свернуть ее. Если эффективность вызывает беспокойство, это может быть быстрее, чем s.toUpperCase(). Equals (s), потому что он может выручить раньше.

public static boolean isUpperCase(String s)
{
    for (int i=0; i<s.length(); i++)
    {
        if (!Character.isUpperCase(s.charAt(i)))
        {
            return false;
        }
    }
    return true;
}

Изменить:. Как отмечали другие плакаты и комментаторы, нам нужно рассмотреть поведение, когда строка содержит небуквенные символы: if isUpperCase ( "HELLO1" ) возвращает true или false? Функция выше вернет false, потому что "1" не является символом верхнего регистра, но это, возможно, не то поведение, которое вы хотите. Альтернативным определением, которое вернет true в этом случае, будет следующее:

public static boolean isUpperCase2(String s)
{
    for (int i=0; i<s.length(); i++)
    {
        if (Character.isLowerCase(s.charAt(i)))
        {
            return false;
        }
    }
    return true;
}

Ответ 4

Не знаю, что знаю.

Вы можете скопировать строку и преобразовать копию в нижний/верхний регистр и сравнить ее с оригинальной.

Или создайте цикл, который проверяет одиночные символы, если нижний или верхний регистр.

Ответ 5

Этот метод может быть быстрее, чем сравнение String с его версией верхнего регистра, поскольку для этого требуется всего 1 проход:

public static boolean isUpper(String s)
{
    for(char c : s.toCharArray())
    {
        if(! Character.isUpperCase(c))
            return false;
    }

    return true;
}

Обратите внимание, что могут быть некоторые проблемы с локализацией с разными наборами символов. У меня нет опыта из первых рук, но я думаю, что есть некоторые языки (например, турецкие), где разные строчные буквы могут сопоставляться с тем же письмом верхнего регистра.

Ответ 6

Это условие if может получить ожидаемый результат:

String input = "ANYINPUT";

if(input.equals(input.toUpperCase())
{
   // input is all upper case
}
else if (input.equals(input.toLowerCase())
{
   // input is all lower case
}
else
{
   // input is mixed case
}

Ответ 7

Попробуйте это, может помочь.

import java.util.regex.Pattern;

private static final String regex ="^[A-Z0-9]"; //alpha-numeric uppercase
public static boolean isUpperCase(String str){
    return Pattern.compile(regex).matcher(str).find();
}

с этим кодом, мы просто изменяем регулярное выражение.

Ответ 8

Вы можете использовать java.lang.Character.isUpperCase() Затем вы можете легко написать метод, который проверяет, является ли ваша строка прописной (с простым циклом).

Отправляя сообщение toUpperCase() в вашу строку, а затем проверяя, будет ли результат равен вашей строке, будет, вероятно, медленнее.