2012-06-14 99 views
0

這是我的一個程序中的一段代碼。如果我直接分配sb1= str2我收到錯誤。所以我創建了兩個StringBuffer對象重新分配一個字符串變量到StringBuffer對象

是否有可能只使用一個StringBuffer對象來實現以下要求。

String str1, str2; 
    Scanner scanObj = new Scanner(System.in); 
    str1 = scanObj.next(); 
    StringBuffer sb1 = new StringBuffer(str1); 
    sb1.reverse(); 
    str1 = sb1.toString(); 
    char[] input1 = str1.toCharArray(); 
    str2 = scanObj.next(); 
    StringBuffer sb2 = new StringBuffer(str2); 
    sb2.reverse(); 
    str2 = sb2.toString(); 
    char[] input2 = str2.toCharArray(); 
+3

除非你需要線程安全,否則你應該使用StringBuilder。它於2004年在Java 5中引入,並優於StringBuffer。 –

+0

@ Peter Ok peter – Theja

回答

0

你可以寫

Scanner scanObj = new Scanner(System.in); 
char[] input1 = new StringBuilder(scanObj.next()).reverse().toString().toCharArray(); 
char[] input2 = new StringBuilder(scanObj.next()).reverse().toString().toCharArray(); 

您可以通過使用setLength(0)和append()重複使用StringBuilder的,但它會更復雜。

+0

更復雜的是如何?你的方法可能會導致內存重新分配。 – Thom

+0

謝謝@Peter .. – Theja

+0

@Thom如果您擔心內存分配問題,您只需要在char []中使用循環,而不使用任何StringBuilder。鑑於該程序不會擔心任何不到1微秒的事情,簡單代碼更可能是重要的。 –

0

由於存在不同的對象,因此不能將StringBuffer直接分配給String。 這會幫助你:

String yourStr = "some value"; 
StringBuffer buffer = new String(yourStr); 
StringBuffer other = buffer; 

你可以把任何String值到StringBuffer對象的構造函數。

1

使用sb.setLength(0),然後添加新的字符串。這應該保持相同的內存分配。

相關問題