2012-06-14 65 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),然后添加新的字符串。这应该保持相同的内存分配。

相关问题