在 Java 中的一组值中查找模式
Finding a pattern in a set of values in Java
有没有办法在 Java 中的字符串列表中提取常见模式?
例如,如果我们有一个值列表:
001-L1
002-L2
003-L3
004-L4
...
有没有办法推断出我们有 3 位数字,然后是“-”,然后是字母 L,最后是数字字符?
我认为它与公共子字符串或类似的东西有关,但我还没有找到任何东西。
谢谢!
编辑:显然这不会是一个完美的识别,它只是 return 基于数据的推荐。
我要构建的是接近 this 的东西。在视频中,当用户点击该列时,会建议将数据拆分为“:”。
我认为您可能想要 "deduce" 一组字符串可能共有的模式,而不是使用正则表达式验证它们。这个问题可能属于模式识别。
- 您可以首先对任意两个字符串应用 Longest Common Substring(不是最长公共子序列)算法。注意,根据你的字符串列表,你可能会得到两个最长的公共子串
00
和-L
,所以你需要注意一下
- 然后,当您得到一个共同的子字符串作为结果时,只需使用
contains()
方法检查其他字符串中的模式。
只有当字符串之间的共同模式至少为几个字符时,此方法才有效。
编辑:
如果你想在给定的视频中实现类似的东西,你只需要根据特定的分隔符分割字符串。一种简单而天真的方法:
- 创建可能的分隔符列表,例如
:
、.
、-
、,
、::
等
- 搜索所有 字符串以查找特定分隔符的出现。 LCS 算法不起作用,因为字符串可能具有共同的数据值(如视频中的 "Yes" 和 "No"),这些值不用作分隔符。
split
基于分隔符的字符串,如果在所有(甚至大部分)字符串中都找到!
可能有比这个更多的最优解!
有没有办法在 Java 中的字符串列表中提取常见模式?
例如,如果我们有一个值列表:
001-L1
002-L2
003-L3
004-L4
...
有没有办法推断出我们有 3 位数字,然后是“-”,然后是字母 L,最后是数字字符?
我认为它与公共子字符串或类似的东西有关,但我还没有找到任何东西。
谢谢!
编辑:显然这不会是一个完美的识别,它只是 return 基于数据的推荐。
我要构建的是接近 this 的东西。在视频中,当用户点击该列时,会建议将数据拆分为“:”。
我认为您可能想要 "deduce" 一组字符串可能共有的模式,而不是使用正则表达式验证它们。这个问题可能属于模式识别。
- 您可以首先对任意两个字符串应用 Longest Common Substring(不是最长公共子序列)算法。注意,根据你的字符串列表,你可能会得到两个最长的公共子串
00
和-L
,所以你需要注意一下 - 然后,当您得到一个共同的子字符串作为结果时,只需使用
contains()
方法检查其他字符串中的模式。
只有当字符串之间的共同模式至少为几个字符时,此方法才有效。
编辑:
如果你想在给定的视频中实现类似的东西,你只需要根据特定的分隔符分割字符串。一种简单而天真的方法:
- 创建可能的分隔符列表,例如
:
、.
、-
、,
、::
等 - 搜索所有 字符串以查找特定分隔符的出现。 LCS 算法不起作用,因为字符串可能具有共同的数据值(如视频中的 "Yes" 和 "No"),这些值不用作分隔符。
split
基于分隔符的字符串,如果在所有(甚至大部分)字符串中都找到!
可能有比这个更多的最优解!