Java,获取部分与输入匹配的模式部分

正如标题所说,我想获得与输入部分匹配的模式部分;例子:

模式:aabb 输入字符串:“aa”

在这一点上,我将使用 Matcher 类的 hitEnd() 方法来找出模式是否部分匹配,如本答案所示,但我还想找出“aabb”中的“aa”匹配。有没有办法在java中做到这一点?


慕后森
浏览 177回答 2
2回答

海绵宝宝撒

Matcher 类中没有这样的功能。但是,您可以通过以下方式实现它:public String getPartialMatching(String pattern, String input) {    Pattern p = Pattern.compile(pattern);    Matcher m = p.matcher(input);    int end = 0;    while(m.find()){        end = m.end();    }    if (m.hitEnd()) {        return input.substring(end);    } else {        return null;    }}首先,遍历字符串的所有匹配部分并跳过它们。例如:input = "aabbaa" m.hitEnd()将false不跳过而返回aabb。其次,验证字符串的左侧部分是否部分匹配。

FFIVE

这可能很脏,但我们开始......一旦你知道一些 string hitEnd,做第二次处理:从字符串中删除最后一个字符使用原始正则表达式搜索如果 It matches,那么你就结束了,你有字符串的一部分如果不是,则转到1并重复整个过程,直到匹配为止如果测试字符串可能很长,则性能可能是一个问题。因此,不要尝试从最后到第一个位置,而是尝试搜索块。例如,考虑一个 1,000 个字符的字符串:测试 1000/2 个字符:1-500。对于这个例子,我们认为它匹配测试前 500 个字符 + 500/2(1-750 个位置)。对于这个例子,我们认为它不匹配。所以我们知道仓位必须放在500到750之间现在测试 1-625 ((750+500)/2)... 如果匹配,则位置必须存在于 625-750 之间。如果不匹配,它必须是从 500 到 625...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java