2015-05-04 3 views
3

У меня есть строка, называемая «originalstring», которая содержит предложение со смешанными символами верхнего и нижнего регистра.Преобразование java char внутри строки в lowerCase/upperCase

Я просто хочу перевернуть строку так, чтобы, если символ строчной буквы, это верхний регистр и наоборот.

Я попробовал этот код, который возвращает исходную строку в верхнем регистре:

for (int i = 0; i < originalString.length(); i++) { 
     char c = originalString.charAt(i); 

     if (Character.isUpperCase(c)) { 
      originalString += Character.toLowerCase(c); 

     } 

     if (Character.isLowerCase(c)) { 
      originalString += Character.toUpperCase(c); 

     } 

    } 
    return originalString; 
+0

'+ = 'для преобразования ?? Это странно –

+0

Это ваш фактический код? Похож на бесконечный цикл ко мне с первого взгляда ... – CupawnTae

+0

Как это может быть бесконечный цикл? Вам нужно заявление else. Ваш первый 'if' конвертирует заглавные буквы в строчные буквы. Затем он неизбежно переходит в ваш второй оператор 'if' и преобразует его в верхний регистр. Просто переключите второй 'if' на' else'. Id также рекомендует использовать StringBuilder. – user489041

ответ

7

Вы добавляете символы в исходной строке. Кроме того, это означает, что ваш цикл for никогда не дойдет до конца итерации цикла for, потому что originalString.length() также изменяет каждый цикл. Это бесконечный цикл.

Вместо этого создайте StringBuilder, который хранит преобразованные символы, когда вы выполняете итерацию по исходной строке. Преобразуйте его в String и верните его в конце.

StringBuilder buf = new StringBuilder(originalString.length()); 
for (int i = 0; i < originalString.length(); i++) { 
    char c = originalString.charAt(i); 

    if (Character.isUpperCase(c)) { 
     buf.append(Character.toLowerCase(c)); 

    } 
    else if (Character.isLowerCase(c)) { 
     buf.append(Character.toUpperCase(c)); 

    } 
    // Account for case: neither upper nor lower 
    else { 
     buf.append(c); 
    } 

} 
return buf.toString(); 
6

Common-языки обеспечивают swapCase функцию, см the doc. Пример из дока:

StringUtils.swapCase(null)     = null 
StringUtils.swapCase("")     = "" 
StringUtils.swapCase("The dog has a BONE") = "tHE DOG HAS A bone" 

И если вы действительно хотите сделать это самостоятельно, вы можете проверить источник common-lang StringUtils

0

Вместо использования существующих утилит, вы можете попробовать ниже преобразование с использованием булевой операции:

В верхнем регистре:

char upperChar = (char) (c & 0x5f) 

Чтобы опустить случай:

char lowerChar = (char) (c^0x20) 

В программе:

StringBuilder result = new StringBuilder(originalString.length()); 
     for (int i = 0; i < originalString.length(); i++) { 
      char c = originalString.charAt(i); 

      if (Character.isUpperCase(c)) { 
       result.append((char) (c^0x20)); 

      } 
      else if ((c >= 'a') && (c <= 'z')) { 
       result.append((char) (c & 0x5f)); 

      } 
      else { 
       result.append(c); 
      } 

     } 
     System.out.println(result); 
Смежные вопросы