匹配两个字符串,一个用x,另一个用任何字符

时间:2014-10-07 12:04:36

标签: java regex string pattern-matching

我是正则表达式的新手所以不要这样做。 我需要在Java中匹配两个String,其中一个将具有x的数量,而其他的可以在这些地方具有任何字符。

For example - 
String 1 - this is the time xxxx when i get up
String 2 - this is the time 0830 when i get up

这两个字符串应该匹配并返回true。

请建议。

感谢。

正如你们许多人提到的那样,问题不是很清楚。我将添加更多详细信息 -

1. x can appear 2 to any number of times.
2. Strings will be dynamic, or in other words, they'll be passed to a method -

public boolean doesMatch(String str1, String str2) {
  // matching code
  return false;
}

另一个例子可能是 -

this is xxxday and i xxxx it
this is friday and i like it

这两个字符串也应匹配。

4 个答案:

答案 0 :(得分:2)

您需要重建状态引擎:

public boolean doesMatch(String str1, String str2) {
    if (str1.length() != str2.length())
        return false;
    for (int i = 0; i < str1.length(); i++)
        if (str1.charAt(i) != 'x' && str1.charAt(i) != str2.charAt(i))
            return false;
    return true;
}

这会循环显示str1并确保str1str2中的每个字符在每个位置都相等,除非str1的相应位置为'x'

答案 1 :(得分:1)

this is the time .{4} when i get up

这是满足您的场景的正则表达式

演示:http://regex101.com/r/kO5wP7/1

答案 2 :(得分:1)

很简单,理解你要匹配四个x s序列或四个数字序列:

String[] inputs = {
    "this is the time xxxx when i get up", 
    "this is the time 0830 when i get up"
};
//                           | word boundary
//                           |  | non-capturing group 
//                           |  |   | 4 digits 
//                           |  |   |    | or
//                           |  |   |    || x * 4
//                           |  |   |    ||    | word boundary
Pattern p = Pattern.compile("\\b(?:\\d{4}|x{4})\\b");
Matcher m;
// iterating over examples
for (String s : inputs) {
    // matching
    m = p.matcher(s);
    // iterating over matches
    while (m.find())
        // printing whatever findings
        System.out.printf("Found \"%s\"!%n", m.group());
}

<强>输出:

Found "xxxx"!
Found "0830"!

答案 3 :(得分:1)

只需用x替换数字然后比较

String str1 = "this is the time xxxx when i get up";
String str2 = "this is the time 0830 when i get up";

if (str2.replaceAll("\\d", "x").equals(str1)) {
    System.out.println("both are the equal strings");
}

根据您的持续更新

如果它不是x,只需迭代第一个字符串的所有字符,然后比较它,否则跳过它。

public static boolean doesMatch(String str1, String str2) {
    if (str1.length() == str2.length()) {
        for (int i = 0; i < str1.length(); i++) {
            char ch = str1.charAt(i);
            // check the character if not x then compare
            if (ch != 'x' && ch != str2.charAt(i)) {
                return false;
            }
        }
    }
    return true;
}