Java字符串比较与正则表达式的区别?

标签 java regex string comparison

我正在比较大量字符串(日志条目)以验证某些系统结果是否未更改。我的第一次尝试足够直接,只是使用 .equals() 比较。如果 .equals() 失败。

只有当我的系统结果在同一天记录时,此功能才有效。部分数据包括访问的时间戳。我不介意访问日期是否不同,我关心的是其余的有效负载。

作为我正在比较的一小部分字符串的示例:

...3X68 : accessed 14 Oct 2014 : from quo... 
...3X68 : accessed 16 Oct 2014 : from quo...  

这些字符串有多种我想忽略的“accessed dd MMM yyyy”标签,通常约为 5-10 个,但在某些情况下,数据可能有数百千字节,有数百个 block ,每个 block 都有一个副本已访问的邮票。 (是的,删除冗余就在列表中。)

我已经尝试了几次与正则表达式“accessed\d\d​​ ...\d\d​​\d\d”不匹配的尝试,但由于子字符串可能会出现多次,所以我最终编写了正则表达式对多次此类搜索进行测试,但由于它可能会出现一百次或更多次,因此这很快就不切实际。

有哪些更好的方法来运行这种字符串与异常的比较?直接还是通过利用库?

最佳答案

确实有很多方法可以解决这个问题。鉴于除了时间戳问题之外,String.equals() 比较可以满足您的目的,相对简单的方法是从输入和比较数据中删除时间戳,并使用 String。 equals() 来比较您关心的部分(即剩下的部分)。您可以使用正则表达式来进行剥离:

Pattern tsPattern = Pattern.compile("accessed \d\d ... \d\d\d\d");
Matcher m = tsPattern.matcher(input);
String stripped = m.replaceAll("");

您也可以使用 String.replaceAll() 来完成此操作,但如果您要进行大量替换,那么使用 Matcher 会更便宜,因为您可以做

m.reset(nextInput);

避免为每个字符串重新编译正则表达式。

关于Java字符串比较与正则表达式的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26413592/

相关文章:

c# - RegEx 匹配具有 1 个或多个结果的引号

java - 如何将包含负数的字符串解析为整数?

Android从json文件(.txt)获取数据

c - 字符串中的单词排序

java - 你什么时候决定为你的对象使用访问者?

java - 获取 "maximum value entered by user"吗?

java - 学习 Maven 的最快方法

java - 如何使用 Java 流进行过滤

javascript - 我怎样才能匹配只找到嵌套模式的正则表达式

c# - 用于检查 XML 是否格式正确的正则表达式