Java 为什么';包含零的字符串中的t/0/g匹配?

Java 为什么';包含零的字符串中的t/0/g匹配?,java,regex,Java,Regex,此代码最后始终返回“false”,即使整数包含任何零: 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()=如果整数包含一个或多个

此代码最后始终返回“false”,即使整数包含任何零:

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”

print(m.find());
匹配器将从一开始就匹配。使用
find
,因为在您的情况下
0
输入是不可能的

使用“查找”可以定位字符串中的任何位置
0

matches
尝试将表达式与整个字符串相匹配,并在模式的开始处隐式添加“^”,在模式的结尾处隐式添加“$”,这意味着它不会查找子字符串。因此
false


另外,按照另一个答案的建议,将正则表达式更改为
“0”

问题在于您给出的正则表达式不正确。您给出的字符串只是表达式的文本,两边没有
/
,也没有标志;标志是单独指定的

因此,在您的情况下,您只需要:

String regexp = "0";
没有“全球”标志;取而代之的是,根据您所做的操作,使用生成的
Matcher
上的方法

需要:m.matches()=如果整数包含一个或多个零,则为“true”

print(m.find());
然后您不想使用
Matcher#matches
,而是想使用
Match#find
。或者,如果需要使用
Matcher#matches
,则表达式为:

String regexp = ".*0.*";
…例如,任何字符的任何数字,然后是0,然后是任何字符的任何数字。这样,整个字符串可以匹配表达式


当然,如果你只是想知道有一个零,那么使用它就简单多了

boolean flag = String.valueOf(i).indexOf('0') != -1;

在这种特殊情况下,您根本不需要正则表达式,因为您正在查找文字字符,请使用
indexOf

if (Str.indexOf( '0' ) != -1) {
...
关于您的原始模式:

在Java中,正则表达式不需要包含在分隔符之间,所以斜杠是无用的。不需要全局修改器,因为全局性质由您选择的方法决定。(换句话说,获得多个结果的唯一方法是在循环中使用
find
方法来获得不同的结果)

尝试

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());
}
正则表达式:


对不起,语法嗯,您的正则表达式正在查找斜杠和
g
字符。。。你认为它们会从哪里来?这里是Java。请尝试
String regexp=“*0.*”
。您需要使用find函数。“.*0.*”有效,而不是我,但简单地更改为
find
无法解决问题<代码>字符串regexp=“/0/g”