java - 比较两个未知字符串并找到匹配项

标签 java regex

如果我有

String x = "test";
String s = "tastaegasghet;

你可以在字符串 s 中找到 test。使用已知字符串执行此操作的简单方法如下:

.*t+.*e+.*s+.*t+.*

如果我们可以按顺序找到字母 t e s t 以及其间的任何字符,则返回 true。我想做同样的事情,但有两个未知的字符串 x 和 s,或者换句话说,字符串 s 和 x 可以是任何东西。我不需要硬编码的东西,而是通用的东西。

最佳答案

这是循环解决方案的伪代码:

function (
    needle, // x
    haystack // s
) {
    j = 0
    for (i = 0; i < haystack.length && j < needle.length; i++) {
         if (haystack[i] == needle[j]) {
             j++
         }
    }

    return j == needle.length
}

您只需要循环遍历 haystack 字符串中的每个字符,并在找到匹配的字符时将指针推进 Needle 字符串中。如果指针到达针串的末尾,则表示可以找到作为干草堆串的子序列的针串。

您可以做的一个小优化是检查 needle.length <= haystack.length在开始循环之前。

只是为了好玩

如果你想走克苏鲁的路,你可以使用这个结构:

(?>.*?t)(?>.*?e)(?>.*?s)(?>.*?t).*+

这不存在灾难性回溯的风险,并且应该与上面的循环类似(线性复杂性),只是它在编译和匹配正则表达式方面有大量开销。

关于java - 比较两个未知字符串并找到匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733580/

相关文章:

java - 正则表达式匹配Java

java - 版本控制 javascript 文件作为 Maven 构建的一部分以避免 Web 浏览器缓存

JavaFX 应用程序主要功能不工作

javascript - preg_match : javascript url string

php - 用于删除多语言字符串中特殊字符的正则表达式

java - Try With Resources 与 Try-Catch

java - java中的对象数组有什么用?

用于验证字符串中的坐标(纬度和经度对)数组的正则表达式

ruby-on-rails - 从 rails 中的属性中删除所有 html 标签

Javascript 正则表达式检测页面源中的所有电话号码