2

我读到在Java中,String是不可变的,所以我们不能直观地使用toLowerCase,即原始字符串未修改:

String s = "ABC";
s.toLowerCase();

> "ABC"

但即使使用 StringBuffer(支持可变字符串)也不起作用

StringBuffer so = new StringBuffer("PoP");

so.toLowerCase()

> Static Error: No method in StringBuffer has name 'toLowerCase'

我感谢任何提示或建议。

4

2 回答 2

14

好吧,它没有。你必须使用.toString().toLowerCase()

String lowercase = sb.toString().toLowerCase();

如果您想非常严格地不创建不必要的实例,您可以迭代所有字符,并将它们小写:

for (int i = 0; i < sb.length(); i++) {
   char c = sb.charAt(i);
   sb.setCharAt(i, Character.toLowerCase(c));
}

最后 - 更StringBuilder喜欢StringBuffer

于 2012-04-10T20:45:07.847 回答
1

这个函数比使用“String lowercase = sb.toString().toLowerCase();”快大约 20% :

public static StringBuilder StringBuilderLowerCase(StringBuilder pText) {
        StringBuilder pTextLower = new StringBuilder(pText);
        for (int idx = 0; idx < pText.length(); idx++) {
            char c = pText.charAt(idx);
            if (c >= 65 && c <= 65 + 27) {
                pTextLower.setCharAt(idx, (char) ((int) (pText.charAt(idx)) | 32));
            }
        }
        return pTextLower;
}
于 2013-10-25T08:37:48.603 回答