【问题标题】:Re-Assaigning a string variable to StringBuffer Object将字符串变量重新分配给 StringBuffer 对象
【发布时间】:2012-06-17 10:37:44
【问题描述】:

这是我的一个程序中的一段代码。如果我直接分配 sb1= str2 我会收到错误消息。所以我正在创建 两个 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();

【问题讨论】:

  • 除非你需要线程安全,否则你应该使用 StringBuilder。它于 2004 年在 Java 5 中引入,优于 StringBuffer。

标签: java arrays string stringbuffer


【解决方案1】:

使用 sb.setLength(0) 然后重新添加新字符串。这应该保持相同的内存分配。

【讨论】:

    【解决方案2】:

    你可以写

    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,但会更复杂。

    【讨论】:

    • 更复杂怎么办?您的方法可能会导致重新分配内存。
    • @Thom 如果您担心内存分配,您只需在char[] 上使用循环而不使用任何 StringBuilder。鉴于程序不太可能担心不到一微秒的任何事情,因此代码的简单性可能更重要。
    【解决方案3】:

    您不能将StringBuffer 直接分配给String,因为存在不同的对象。 这应该可以帮助您:

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

    您可以将任何String 值放入StringBuffer 对象构造函数中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-12
      • 2015-12-24
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多