java - 在 Java 中将模式与输入进行匹配

标签 java regex

所以我在编码挑战中遇到了这个问题,并且非常迷失。我需要编写一个函数,它接受一个模式并将其与输入相匹配。例如模式是 abba输入为 bluegreengreenblue 。 在这种情况下,函数返回 true,因为输入与模式匹配。 如果输入是bluebluegreengreen,答案将为假。对于相同的图案。 本质上我正在尝试编写一个函数,

boolean wordpattern(String pattern, string input){

     //process input to match pattern
     // return true if it matches
    //return false if it doesn't
}

输入不一定是有意义的单词。可以是axcdefdeefdeaxcd 有人可以帮助我用算法来开始解决这个问题吗?我想不出任何方法来开始解决这个问题。

最佳答案

我建议生成一个正则表达式。然后将生成的正则表达式应用到您的文本中。

生成正则表达式时,对每个第一次出现的字符使用 (.+) ,然后使用 \1\2 引用它> 等

代码可能如下所示:

import java.util.*;
import java.util.regex.Pattern;

public class X {

    public static void main(String[] args) {
        wordpattern("abba", "bluegreengreenblue");
    }

    protected static boolean wordpattern(String pattern, String input) {
        Map<Character,Integer> patternItemNumbers = new HashMap<>();
        StringBuilder regularExpression = new StringBuilder();
        int groupCount = 1;

        for (char patternItem : pattern.toCharArray()) {
            Integer group = patternItemNumbers.get(patternItem);

            // first occurrence: create new fetching group
            if (group == null) {
                regularExpression.append("(.+)");
                patternItemNumbers.put(patternItem, groupCount++);
            }

            // every next occurrence: reuse group by identifier
            else {
                regularExpression.append('\\');
                regularExpression.append(group);
            }
        }

        String regexp = regularExpression.toString();
        boolean matches = Pattern.matches(regexp, input);

        System.out.println("pattern: "+pattern);
        System.out.println("regular expression: "+regexp);
        System.out.println("matches: "+matches);

        return matches;
    }

}

它输出:

pattern: abba
regular expression: (.+)(.+)\2\1
matches: true
<小时/>

另一个例子:wordpattern("aaab", "bluebluebluegreen"); 将输出:

pattern: aaab
regular expression: (.+)\1\1(.+)
matches: true

关于java - 在 Java 中将模式与输入进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35515617/

相关文章:

java - 为什么线程对象在作用域后没有被销毁?

java - 如何获取 Maven Shade 插件构建的 uberjar 中包含的 jar 列表?

java - 在每个 '<br>' -Tag 处将字符串拆解为数组

regex - grep “+” 运算符不起作用

Java: String.replaceAll(regex, replacement);

java - 如果它不是 spring MVC 中的 bean,如何验证请求参数?

JavaFx AnimationTimer - 我从不停止我的计时器(问题?)

java - 如何将二维数组转换为一维数组?

java - 整个 Xss(堆栈空间)是否用于每个 Java 线程?

javascript - 在 Javascript 中验证电子邮件地址,并与非 ASCII 字符兼容