此代码最后总是返回“false”,即使Integer包含任何零:
Integer i = (int) rand(1, 200); // random [1;200)
String regexp = "/0/g";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(i.toString());
print(i);
print(m.matches());
是什么原因?我不知道错误可能在哪里。
需要:如果整数包含一个或多个零,则m.matches()=“true”。
答案 0 :(得分:3)
问题是你正确地给出正则表达式。您提供的字符串Pattern.compile
只是表达式的文本,两边都没有/
,没有标记;标志是单独指定的。
所以在你的情况下,你只想要:
String regexp = "0";
没有"全球"旗;相反,您可以根据您所做的事情使用生成的Matcher
上的方法。
需要:m.matches()=" true"如果整数包含一个或多个零。
然后你不想使用Matcher#matches
,你想要Match#find
。或者,如果您需要使用Matcher#matches
,则表达式为:
String regexp = ".*0.*";
......例如,任何数字的任何数字,然后是0,然后是任意数量的任何字符。这样,整个字符串就可以匹配表达式。
当然,如果您只是想知道零点,那么使用它会简单得多
boolean flag = String.valueOf(i).indexOf('0') != -1;
答案 1 :(得分:1)
在这种特殊情况下,由于您正在寻找文字字符,因此根本不需要正则表达式,请使用indexOf
:
if (Str.indexOf( '0' ) != -1) {
...
关于你的原始模式:
正则表达式不需要包含在Java中的分隔符之间,因此斜杠是无用的。全局修饰符也不需要,因为全局性质由您选择的方法决定。 (换句话说,获得多个结果的唯一方法是在循环中使用find
方法来获得不同的结果)
答案 2 :(得分:0)
print(m.find());
匹配器将从头开始匹配。在您的情况下,使用find
作为0
输入是不可能的。
使用find可以让您在字符串中的任何位置找到0
。
matches
尝试将表达式与整个字符串进行匹配,并在模式的开头和$处隐式添加^,这意味着它不会查找子字符串。因此false
。
同样根据其他答案的建议将正则表达式更改为"0"
。
答案 3 :(得分:0)
尝试,
String regexp = ".*0.*";
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(i.toString());
if(m.find()){
System.out.println(i);
System.out.println(m.matches());
}
正则表达式: