2012-04-10 12 views
-1

,我讀了在Java中,字符串是不變的,所以我們不能真正使用toLowerCase直觀,即原始字符串保持不變:如何在使用StringBuffer後不能使用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

'S = s.toLowerCase();','so.toString()toLowerCase()'... – 2012-04-10 20:45:12

回答

12

嗯,它不。你不得不使用.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

+1

其中,只是爲了澄清阿德爾,仍不會修改您的StringBuffer。它將返回一個新的String,其內容爲小寫。所以你會做'String s = so.toString()。toLowerCase();' – kcoppock 2012-04-10 20:47:57

+0

非常感謝。我只是做了'so.toString()。toLowerCase()',它確實改變了它......雖然原來的變量仍然是「PoP」,所以我有點困惑StringBuffer的優點是什麼? – Coffee 2012-04-10 20:48:12

+0

@kcoppock - 謝謝,我現在清楚發生了什麼。 – Coffee 2012-04-10 20:49:03

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; 
} 
+0

不使用StringBuilder,而是使用char []更快,大約快75%。 – EarlB 2016-02-11 09:21:10

相關問題