2015-05-04 181 views
3

我有一個名爲「originalstring」的字符串,它包含一個大小寫混合的字符。將字符串內部的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

共朗提供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 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);