为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕后森 2021-12-30 16:30:31
正如标题所说,我想获得与输入部分匹配的模式部分;例子:模式:aabb 输入字符串:“aa”在这一点上,我将使用 Matcher 类的 hitEnd() 方法来找出模式是否部分匹配,如本答案所示,但我还想找出“aabb”中的“aa”匹配。有没有办法在java中做到这一点?
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

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。其次,验证字符串的左侧部分是否部分匹配。


查看完整回答
反对 回复 2021-12-30
?
FFIVE

TA贡献1797条经验 获得超6个赞

这可能很脏,但我们开始......

一旦你知道一些 string hitEnd,做第二次处理:

  1. 从字符串中删除最后一个字符

  2. 使用原始正则表达式搜索

  3. 如果 It matches,那么你就结束了,你有字符串的一部分

  4. 如果不是,则转到1并重复整个过程,直到匹配为止

如果测试字符串可能很长,则性能可能是一个问题。因此,不要尝试从最后到第一个位置,而是尝试搜索块。

例如,考虑一个 1,000 个字符的字符串:

  1. 测试 1000/2 个字符:1-500。对于这个例子,我们认为它匹配

  2. 测试前 500 个字符 + 500/2(1-750 个位置)。对于这个例子,我们认为它不匹配。所以我们知道仓位必须放在500到750之间

  3. 现在测试 1-625 ((750+500)/2)... 如果匹配,则位置必须存在于 625-750 之间。如果不匹配,它必须是从 500 到 625

  4. ...


查看完整回答
反对 回复 2021-12-30
  • 2 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号