我是正则表达式的新手所以不要这样做。
我需要在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
这两个字符串也应匹配。
答案 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
并确保str1
和str2
中的每个字符在每个位置都相等,除非str1
的相应位置为'x'
。
答案 1 :(得分: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;
}