当前位置: 首页 > 知识库问答 >
问题:

Java是否有一种高效的方法在StringBuilder上执行多个regex replaceAll操作?

鄂和璧
2023-03-14

我想使用StringBuilder这样的东西来保存一个字符串,然后对它执行大量的regex replaceAll操作,以一种高效的方式。我想利用StringBuilder的可变大小数组来防止临时字符串分配。也就是说,我希望regex replaceAll操作根据需要修改StringBuilder持有的数组,而不分配临时字符串。我怎么能这么做?

不幸的是,StringBuilder没有一个内置的方法来实现这一点。它只有一个没有regex的replace()方法,如果不使用Matcher将整个StringBuilder缓冲区有效地替换为一个新分配的字符串,我想避免这样做。

共有1个答案

翟黎明
2023-03-14

Regex不会创建额外的字符串。它验证字符串是否匹配(或不匹配)模式。

捕获组返回字符串,但是Java中的字符串不是可变的,所以您不能让它们由可变存储区域来表示,甚至不能让它们由可变存储区域的一部分来表示。

而且,Regex操作不是一个单独的步骤(即使它看起来在代码中),而是以字符串作为输入的状态机的运行。Java是多线程的,如果在机器运行时修改数据,状态机将无法正常工作。要解决这一问题,需要锁定缓冲区,这将导致额外的开销。

 类似资料:
  • 问题内容: 我知道你可以打电话 如果它不是可执行文件,则会得到一个异常,但这是不安全的,因为运行可执行文件会产生副作用。 我想只检查扩展名在Windows上就足够了,但是有没有办法我可以读取* nix文件系统上的可执行文件呢? 找出文件在OS中是否可执行的最佳方法是什么? 问题答案: 参见java.io.File.canExecute()

  • 本文向大家介绍java命令执行jar包的多种方法(四种方法),包括了java命令执行jar包的多种方法(四种方法)的使用技巧和注意事项,需要的朋友参考一下 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个jar包的程序入口。 具体的方法是修改jar包内目录META-INF下的MANIFEST.MF文件。 比如有个叫做test.j

  • 这三个点的(x,y)以及它们的半径 有没有办法找到这三个圆是否在一个或多个像素中相交? 编辑: 在一个点中相交的3个圆的示例

  • 本文向大家介绍Java 多线程有序执行的几种方法总结,包括了Java 多线程有序执行的几种方法总结的使用技巧和注意事项,需要的朋友参考一下 Java 多线程有序执行的几种方法总结 同事无意间提出了这个问题,亲自实践了两种方法。当然肯定还会有更多更好的方法。 方法一     这种方法应该是比较常见的解决方案。利用原子递增控制线程准入顺序。 方法二     方法二使用了volatile关键字。让每个线

  • 判断一个数是否为素数 思路说明 这个问题有多种解法,以下的解法来自网络整理。供参考使用。 解决(Python) #! /usr/bin/env python #coding:utf-8 """ """ #方法一 import math def isPrime1(n): if n <= 1: return False for i in range(2, int(

  • 目前,我的问题有四个指标。每一种方法都是完全不同的(每一种方法都有不同的单位,不同的范围等等),而且每一种方法都是外部加权的。我用口水来得分。 我只有一个分数级别(),我必须找到一种方法,将这些度量的各个分数适当地组合到一个值上 目前最重要的问题是度量值的范围可能有很大的不同。 因此,例如,如果在一次移动之后,一个可能范围较小的度量的得分提高了,比如说10%,那么这可能完全被一次替代移动所抵消,该