makeScopeGuard возвращает ссылку на константу. Вы не можете сохранить эту константную ссылку в const ref со стороны вызывающего абонента в строке, подобной:
const auto& a = RAII::makeScopeGuard( [&]() { myVec.pop_back(); } );
. Таким образом, вы вызываете неопределенное поведение.
Herb Sutter GOTW 88 дает некоторое представление о сохранении значений в ссылках на const.
Я не верю, что есть что-то встроенное для этого (это относительно необычно). Однако это должно сработать:
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.
Думаю, должен быть способ перебрать строку и перевернуть каждый символ
Правильно. Класс java.lang.Character
предоставляет вам для каждого метода isUpperCase ()
для этого. Протестируйте его и используйте методы toLowerCase ()
или toUpperCase ()
в зависимости от результата. Добавьте результат каждого из них в StringBuilder
, и все будет в порядке.