Существует ли существующий метод библиотеки, который проверяет, является ли Строка всем верхним регистром или нижним регистром в Java?

Хотя ответы и комментарии, размещенные здесь, были полезны, они не были причиной проблемы в моем случае.

Фактическая проблема заключалась в том, что образец поступал после того, как я уничтожил объект обратного вызова. Я думал, что решил эту проблему, используя «флаг, мьютекс и переменную условия», как описано в моем комментарии, но эта реализация была неправильной.

Решение, которое решило проблему, было следующим:

  1. Определите два 64-битных счетчика receiveSamples и requiredSamples. Кроме того, флаг «остановлено», мьютекс и условная переменная.
  2. После запуска заблокируйте мьютекс и установите счетчики на 0, а флаг остановки - на false. Затем вызовите sourceReader-> ReadSample, чтобы инициировать получение первого образца.
  3. В «Стоп» заблокируйте мьютекс, установите остановленный флог в значение «истина» и используйте условную переменную, чтобы дождаться получения ReceiveSamples == требуемых образцов.
  4. В OnReadSample заблокируйте мьютекс, увеличьте счетчик receiveSamples, разблокируйте мьютекс и уведомите переменную условия.
  5. Непосредственно перед вызовом sourceReader-> ReadSample заблокировать мьютекс (если он еще не принадлежит) увеличивать счетчик requiredSamples.

Я добавлю фрагмент кода, который демонстрирует это в ближайшее время

29
задан Buhake Sindi 21 March 2014 в 20:18
поделиться

6 ответов

Теперь в StringUtils isAllUpperCase

22
ответ дан gerardw 28 November 2019 в 01:13
поделиться

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

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

    return true;
}

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

5
ответ дан Outlaw Programmer 28 November 2019 в 01:13
поделиться

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

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

0
ответ дан SmuK 28 November 2019 в 01:13
поделиться

Не библиотечная функция, к сожалению, но это довольно легко к самокрутке. Если эффективность является беспокойством, это могло бы быть быстрее, чем 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;
}

Править: Как другие плакаты и комментаторы отметили, мы должны рассмотреть поведение, когда строка содержит символы небуквы: должен 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;
}
15
ответ дан Simon Nickerson 28 November 2019 в 01:13
поделиться

Не то, чтобы я знаю.

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

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

7
ответ дан Markus Lausberg 28 November 2019 в 01:13
поделиться

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

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();
}

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

4
ответ дан 28 November 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: