提问者:小点点

为什么使用StringBuffer后我不能使用toLowerCase()?


我在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'

我感谢任何提示或建议。


共2个答案

匿名用户

嗯,它没有。您必须使用. 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));
}

最后-更喜欢StringBuilderStringBuffer

匿名用户

这个函数比使用“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;
}

相关问题