在Java

时间:2016-11-23 08:29:20

标签: java pattern-matching delimiter

有没有办法在Java中的字符串列表中提取公共模式?

例如,如果我们有一个值列表:

001-L1
002-L2
003-L3
004-L4
...

有没有办法推断我们有3digits,然后是' - ',然后是字母L,最后是数字字符?

我认为它与常见的子串或类似的东西有关,但我还没有找到任何东西。

谢谢!

编辑:显然,它不会是一个完美的认可,它只会根据数据返回推荐。

我尝试构建的内容接近this。在视频中,当用户点击该列时,建议将数据拆分为":"。

1 个答案:

答案 0 :(得分:4)

我认为您可能希望“推断”一组字符串可能具有的共同模式,而不是使用正则表达式验证它们。此问题可能属于模式识别。

  • 您可以先在任意两个字符串上应用Longest Common Substring(不是最长公共子序列)算法。请注意,根据您的字符串列表,您可能会获得两个最长的公共子字符串00-L,因此您需要处理它。
  • 然后,当您获得一个公共子字符串时,只需使用contains()方法检查其他字符串中的模式。

只有在字符串之间的公共模式至少为几个字符时,此方法才有效。

编辑:

如果你想在给定的视频中实现类似的东西,你只需要根据某个分隔符拆分字符串。一种简单而天真的方法:

  • 创建可能的分隔符列表,例如:.-,::等。
  • 搜索 all 您的字符串以查找特定分隔符的出现次数。 LCS算法不起作用,因为字符串可能具有公共数据值(如视频中的“是”和“否”),而不是作为分隔符。
  • split基于分隔符的字符串,如果在所有(甚至大多数)字符串中找到它的话!

可能有比这个更优化的解决方案!