Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要一个高效的算法来实现String.replaceAll()_Java_String - Fatal编程技术网

Java 需要一个高效的算法来实现String.replaceAll()

Java 需要一个高效的算法来实现String.replaceAll(),java,string,Java,String,我在Java中找到了String.replaceAll(),其基础是正则表达式。它在短字符串中运行良好。 但是对于长字符串,我需要一个更有效的算法,而不是string.replaceAll()。 有人能给我建议吗? 谢谢 您可以尝试String.replace(CharSequence目标,CharSequence替换)。它仍然使用模式和匹配器,但target不是正则表达式。您可以尝试String.replace(CharSequence-target,CharSequence-replacem

我在Java中找到了String.replaceAll(),其基础是正则表达式。它在短字符串中运行良好。 但是对于长字符串,我需要一个更有效的算法,而不是string.replaceAll()。 有人能给我建议吗?
谢谢

您可以尝试
String.replace(CharSequence目标,CharSequence替换)
。它仍然使用模式和匹配器,但
target
不是正则表达式。

您可以尝试
String.replace(CharSequence-target,CharSequence-replacement)
。它仍然使用模式和匹配器,但
target
不是正则表达式。

如果要进行增量替换,可以使用显式
appendReplacement/Tail
循环到
StringBuffer
(遗憾的是,到目前为止还没有
StringBuilder
重载)

成语是这样的:

这就是
replaceAll
的实现方式

这种方法的好处是,由于您可以完全控制替换迭代,因此在任何给定时间都不必将整个输出作为潜在的长
字符串存储在内存中。您可以增量生成输出,定期将
StringBuffer
内容刷新到磁盘。也就是说,使用此方法比使用
replaceAll
更节省内存

(您还可以执行当前替换语法不支持的奇特替换,例如
toUpperCase()
transformation)

请注意,
Matcher
需要增强,以便能够附加到任何应用程序。如果授予,您不仅可以使用
StringBuilder
,还可以直接替换为,例如

相关问题
    • 具有有限替换和案例转换的示例
另见
    • 如果批准,此增强请求将允许
      Matcher
      附加到任何
      可附加的

如果要进行增量替换,可以使用显式的
appendReplacement/Tail
循环到
StringBuffer
(遗憾的是,到目前为止还没有
StringBuilder
重载)

成语是这样的:

这就是
replaceAll
的实现方式

这种方法的好处是,由于您可以完全控制替换迭代,因此在任何给定时间都不必将整个输出作为潜在的长
字符串存储在内存中。您可以增量生成输出,定期将
StringBuffer
内容刷新到磁盘。也就是说,使用此方法比使用
replaceAll
更节省内存

(您还可以执行当前替换语法不支持的奇特替换,例如
toUpperCase()
transformation)

请注意,
Matcher
需要增强,以便能够附加到任何应用程序。如果授予,您不仅可以使用
StringBuilder
,还可以直接替换为,例如

相关问题
    • 具有有限替换和案例转换的示例
另见
    • 如果批准,此增强请求将允许
      Matcher
      附加到任何
      可附加的

如果你想要一个有意义的答案,你需要提供更多的细节。你说的是什么语言?replaceAll()非常适合一般情况。共享您试图搜索的特定字符串可能有助于找到更好的答案。如果您想要有意义的答案,则需要提供更多详细信息。您在说什么语言?replaceAll()针对一般情况进行了调整。共享您试图搜索的特定字符串可能有助于找到更好的答案。正是因为这在下面使用了
模式
/
马赫
,所以认为这在性能方面效率更高是错误的(尽管这应该是可以接受的).正是因为这在下面使用了
模式
/
马赫
,所以认为这在性能方面效率更高是错误的(尽管这应该是可以接受的)。
 Pattern p = Pattern.compile(PATTERN);
 Matcher m = p.matcher(INPUT_SOURCE);

 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, REPLACEMENT);
 }
 m.appendTail(sb);

 System.out.println(sb.toString());