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