【问题标题】:Convert java char inside string to lowerCase/upperCase将字符串中的 java char 转换为小写/大写
【发布时间】:2015-07-14 07:09:34
【问题描述】:

我有一个名为“originalstring”的字符串,其中包含一个大小写混合字符的句子。

我只是想翻转字符串,以便如果字符是小写,则将其变为大写,反之亦然并返回。

我试过这段代码,它以大写返回原始字符串:

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;

【问题讨论】:

  • += 转换??这很奇怪
  • 这是您的实际代码吗?乍一看,这对我来说就像一个无限循环......
  • 这怎么可能是一个无限循环?你需要一个 else 语句。您的第一个 if 将大写字母转换为小写字母。然后它立即进入您的第二个if 语句,并将其转换为大写。只需将第二个if 切换为else。我还建议使用 StringBuilder。
  • @user489041 因为它添加到originalString 而不删除字符,并且originalString.length() 处于循环终止条件。当然,它最终会耗尽内存。

标签: java string character uppercase lowercase


【解决方案1】:

您正在向原始字符串添加字符。此外,这意味着您的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();

【讨论】:

    【解决方案2】:

    Common-lang 提供了一个swapCase 函数,参见the doc。文档中的示例:

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

    如果你真的想自己做,可以查看common-lang StringUtils的来源

    【讨论】:

      【解决方案3】:

      您可以尝试使用布尔运算进行以下转换,而不是使用现有的实用程序:

      转大写:

       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);
      

      【讨论】:

        猜你喜欢
        • 2013-05-14
        • 1970-01-01
        • 2014-10-30
        • 2010-12-29
        • 1970-01-01
        • 2017-05-18
        • 2016-01-22
        • 2022-01-19
        • 1970-01-01
        相关资源
        最近更新 更多