【问题标题】:What's the StringBuffer alternative for String.endsWith?String.endsWith 的 StringBuffer 替代方案是什么?
【发布时间】:2015-07-08 13:27:24
【问题描述】:

我一直在并发应用程序中使用字符串,为了使代码更加优化,我必须使用StringBuffer而不是字符串?但我很困惑string.endsWith("\\") 的替代品是StringBufferStringBuffer 的什么方法应该用于上述目的?

【问题讨论】:

  • 除非必要,否则请不要使用 StringBuffer,因为十年前它已被 StringBuilder 取代。
  • @PeterLawrey StringBuilder 不是线程安全的。如果是并发应用程序,你有什么替代字符串缓冲区的方法吗?
  • 你能给我一个在多线程程序中使用 StringBuffer 的例子吗?注意:您一次只能以线程安全的方式执行一种方法。例如sb.append("a").append("b").toString() 可能会在方法调用之间释放锁,因此它不是线程安全的。

标签: java concurrency stringbuffer


【解决方案1】:

您可以检查StringBuffer的最后一个字符

if(buf.charAt(buf.length()-1)=='\\'){
  //
}

【讨论】:

    【解决方案2】:

    没有直接 API。你可以试试stringBuffer.lastIndexOf("\\")==stringBuffer.length()-1

    stringBuffer.charAt(stringBuffer.length()-1)=='\\'

    PS:以上代码示例未经测试

    【讨论】:

    • 您不应该测试代码然后发布吗? :)
    • @ChetanKinger - 理想情况下是的。我只是在向 OP 展示如何做到这一点。
    • StringBuffer和==比较可以吗?
    • @AbdullahFarid - 不是StringBuffer,您正在使用== 比较int 的值。所以没关系
    • @LostMind stringBuffer.charAt(stringBuffer.length()-1)=='\\' 这段代码怎么样。它比较 char 和 ==
    【解决方案3】:

    字符串对象是不可变的 - 所以没有改变/修改对象状态的选项。换句话说,您不应该担心并发性。 我的建议:继续使用 String!

    【讨论】:

    • 问题是关于优化,而不是担心并发!
    【解决方案4】:

    如果您使用 commons-lang 依赖项,StringUtils.endsWith(sb, s)sb.lastIndexOf(s)==sb.length()-s.length() 更简单,并且它也适用于 StringBuilder。

    【讨论】:

      猜你喜欢
      • 2021-11-13
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2018-04-16
      相关资源
      最近更新 更多