gpt4 book ai didi

java - Java 是否有一种有效的方法在 StringBuilder 上执行多个正则表达式 ReplaceAll 操作?

转载 作者:行者123 更新时间:2023-12-02 10:29:47 25 4
gpt4 key购买 nike

我想使用 StringBuilder 之类的东西来保存字符串,然后以有效的方式对其执行大量正则表达式 ReplaceAll 操作。我想利用 StringBuilder 的可变大小数组并防止临时字符串分配。也就是说,我希望正则表达式 ReplaceAll 操作根据需要改变 StringBuilder 保存的数组,而不分配临时字符串。我怎样才能做到这一点?

不幸的是,StringBuilder 没有内置方法来执行此操作。它只有一个没有正则表达式的replace()方法,如果不使用Matcher用新分配的字符串有效地替换整个StringBuilder缓冲区,我看不到一种方法来做到这一点,我想避免这种情况。

最佳答案

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

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

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

在锁的开销和拥有不同 String 对象的开销之间,锁的开销会使维护两个不可变对象(immutable对象)所节省的成本为负。简而言之,与没有十几个(甚至可能一百个)附加字符串相比,您在获取锁定上花费的 CPU 周期要多得多。

最后,整个 JVM 包含特定于字符串的优化。如果您想要一个可变字符串,那么这些优化将不起作用,并且会导致 JVM 中更常用的数据类型之一出现奇怪的行为。

关于java - Java 是否有一种有效的方法在 StringBuilder 上执行多个正则表达式 ReplaceAll 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53677078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com