簡體   English   中英

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

[英]How come I can't use toLowerCase() after using a StringBuffer?

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

我感謝任何提示或建議。

好吧,事實並非如此。 你必須使用.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

這個 function 比使用“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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM