2015-05-04 134 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);