Как я могу инвертировать регистр строки в Java?

makeScopeGuard возвращает ссылку на константу. Вы не можете сохранить эту константную ссылку в const ref со стороны вызывающего абонента в строке, подобной:

const auto& a = RAII::makeScopeGuard( [&]() { myVec.pop_back(); } ); 

. Таким образом, вы вызываете неопределенное поведение.

Herb Sutter GOTW 88 дает некоторое представление о сохранении значений в ссылках на const.

13
задан James 13 November 2009 в 15:07
поделиться

3 ответа

Я не верю, что есть что-то встроенное для этого (это относительно необычно). Однако это должно сработать:

public static String reverseCase(String text)
{
    char[] chars = text.toCharArray();
    for (int i = 0; i < chars.length; i++)
    {
        char c = chars[i];
        if (Character.isUpperCase(c))
        {
            chars[i] = Character.toLowerCase(c);
        }
        else if (Character.isLowerCase(c))
        {
            chars[i] = Character.toUpperCase(c);
        }
    }
    return new String(chars);
}

Обратите внимание, что при этом не происходит изменений, зависящих от языкового стандарта, как в String.toUpperCase / String.toLowerCase. Он также не обрабатывает символы, отличные от BMP.

18
ответ дан 1 December 2019 в 17:55
поделиться

Думаю, должен быть способ перебрать строку и перевернуть каждый символ

Правильно. Класс java.lang.Character предоставляет вам для каждого метода isUpperCase () для этого. Протестируйте его и используйте методы toLowerCase () или toUpperCase () в зависимости от результата. Добавьте результат каждого из них в StringBuilder , и все будет в порядке.

2
ответ дан 1 December 2019 в 17:55
поделиться

Apache Commons StringUtils имеет метод swapCase .

23
ответ дан 1 December 2019 в 17:55
поделиться
Другие вопросы по тегам:

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