当前位置: 首页 > 面试题库 >

替换字符串中所有出现的子字符串-在Java中哪个效率更高?

萧晓博
2023-03-14
问题内容

我知道替换字符串中 所有 出现的子字符串的两种方法。

正则表达式的方式(假设“要替换的子字符串”不包括正则表达式的特殊字符):

String regex = "substring-to-be-replaced" + "+";
Pattern scriptPattern = Pattern.compile(regex);
Matcher matcher = scriptPattern.matcher(originalstring);
newstring = matcher.replaceAll("replacement-substring");

String.replace()方式:

newstring = originalstring.replace("substring-to-be-replaced", "replacement-substring");

两者中哪一个效率更高(为什么)?

是否有比上述两种方法更有效的方法?


问题答案:

String.replace() 在下面使用正则表达式。

public String replace(CharSequence target, CharSequence replacement) {
      return Pattern.compile(target.toString(), Pattern.LITERAL)
             .matcher(this ).replaceAll(
               Matcher.quoteReplacement(replacement.toString()));
  }

是否有比上述两种方法更有效的方法?

假设您在一个由数组支持的实现上进行操作,而不是在不可变的String类上进行操作(因为每次调用string.replace都会创建一个 新的
字符串)。例如,参见StringBuilder.replace()。

编译正则表达式会产生 很多 开销,这在观察Pattern源代码时很明显。幸运的是,Apache提供了一种替代方法StringUtils.replace(),根据源代码(第3372行),该方法非常有效。



 类似资料:
  • 本文向大家介绍替换Java字符串中的子字符串,包括了替换Java字符串中的子字符串的使用技巧和注意事项,需要的朋友参考一下 假设以下是我们的字符串。 我们想将子字符串“ Dead”替换为“ Alive”。为此,让我们使用以下逻辑。在这里,我们使用了while循环,并在其中找到了要替换的子字符串的索引。这样,我们一个接一个地替换了整个子字符串。 以下是替换子字符串的完整示例。 示例 输出结果

  • 问题内容: 我正在尝试查找Java字符串中所有出现的子字符串。 例如:在“ ababsdfasdfhelloasdf”中搜索“ asdf”将返回[8,17],因为有2个“ asdf”,一个在位置8,另一个在17。在“ aaaaaa”中搜索“ aa”将返回[0, 1,2,3,4],因为位置0、1、2、3和4处有一个“ aa”。 我尝试了这个: 可以在Python中解决此问题,如下所示: 其中“ wo

  • 问题内容: 我想替换字符串中第n个出现的子字符串。 一定有什么我想做的事情是 最简单,最Python化的方法是什么? 为什么不重复: 我不想在这种方法中使用正则表达式,而我发现的类似问题的大多数答案只是正则表达式剥离或真正复杂的功能。我真的想要尽可能简单而不是正则表达式的解决方案。 问题答案: 我使用简单的函数,该函数列出所有出现的事件,选择第n个位置,并使用它将原始字符串分成两个子字符串。然后,

  • 问题内容: 为什么以下算法对我来说不停止?(str是我要搜索的字符串,findStr是我要寻找的字符串) 问题答案: 最后一行造成了问题。永远不会为-1,所以会有无限循环。可以通过将代码的最后一行移到if块中来解决此问题。

  • 问题内容: 对于穷人在客户端上实现近似排序规则正确排序的实现,我需要一个JavaScript函数,该函数可以 有效地 替换字符串中的单个字符。 这就是我的意思(请注意,这适用于德语文本,其他语言则有不同的排序方式): 基本上,我需要将给定字符串的所有出现的“ä”替换为“ a”(依此类推)。这样,本机排序的结果将非常接近用户的期望(或数据库将返回的结果)。 其他语言也具有执行此操作的功能:Pytho

  • 问题内容: 我需要解析一个HTML文档并查找其中所有出现的字符串。 我目前将HTML加载到字符串变量中。我只需要字符位置,这样我就可以遍历列表以在字符串之后返回一些数据。 该函数仅返回第 一个 匹配项。如何 全部 归还呢? 问题答案: 在不使用正则表达式的情况下,类似这样的方法应该可以返回字符串位置: