Java字符串搜索性能很少,但很多次

时间:2018-05-21 14:47:48

标签: java string performance

我有一个处理大量消息的服务(这些消息最多100个字符)。

要做的任务之一是检测消息是否包含字符串,该字符串始终相同。 以下哪项更快? 正则表达式,预编译正则表达式,IndexOf,包含或任何其他?

3 个答案:

答案 0 :(得分:0)

只需使用contains:如果您是第一次看到该消息,那么您基本上无法做任何其他事情,因为您必须至少查看一次消息内容。但是在您查找时,您可以同时检查它是contains特殊关键字。

您可以(也可能应该)做的是并行处理多条消息,因为您的任务似乎与消息数量相媲美。

答案 1 :(得分:0)

我有一个不同的理论,因为你指的是一个处理大量消息并且消息很长的服务,我建议你使用Pattern,Matcher,因为它是找到正则表达式文本的正确方法。在实践中(使用大型文本),在您的情况下,这将是最有效的方式。这是因为正则表达式引擎(慢速)不会处理常量模式(如“ho”),而是由Boyer-Moore-Algorithm(快速)处理。此外,如果您正在实现一个仅根据某些模式处理消息的服务,您必须保持其灵活性,以便它允许可扩展的搜索模式,而不是被修复 - 即,服务从配置获取模式并应用它根据标准。

guide显示了如何实施搜索模式,应用符合您需求的搜索模式。它有很好的例子,说明如何使用Quantifiers,Boundary Matchers等。Here是另一个有用的链接,指向专注于正则表达式和String.matches性能的博客。

答案 2 :(得分:0)

如果您在多个文本中搜索一个字符串,而不是使用字符串搜索算法。如果使用jdk java.util.regex.Pattern搜索常量模式,则会隐式使用一个。有更快的算法,它们的性能不同:

  • 字母大小
  • 模式的大小

如果搜索多个字符串,则jdk中没有其他选项(不要使用java.util.regex,因为它无法有效搜索多个字符串)。

的多字符串算法在性能上有所不同
  • 字母大小
  • 模式的大小
  • 搜索模式的数量

您可以在StringSearchAlgorithms找到单字符串/多字符串算法的概述。