2015-02-11 133 views
-1

该代码总是返回最后“假”,即使整数包含任何零:为什么/ 0/g在包含零的字符串中匹配?

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”如果Integer包含一个或多个零。作为0输入你的情况是不可能的

+0

对不起语法 – 2015-02-11 13:15:04

+1

什么是/ g? .... – 2015-02-11 13:15:34

+1

嗯,你的正则表达式正在寻找斜线和'g'字符......你期望那些来自哪里? – 2015-02-11 13:15:47

回答

3

问题是你正确地给正则表达式。您给Pattern.compile的字符串是只是表达式的文本,两边都没有/,也没有标志;标志是分开指定的。

你的情况

所以,你只是想:

String regexp = "0"; 

有没有 “全局” 标志;相反,您可以根据您所做的工作适当使用生成的Matcher上的方法。

需要:m.matches()=“true”如果Integer包含一个或多个零。

然后你不想用Matcher#matches,你想要Match#find。或者,如果你需要使用Matcher#matches,表达的是:

String regexp = ".*0.*"; 

... e.g,任意数量的任意字符,然后是0,那么任何数目的字符。这样,整个字符串可以匹配表达式。


当然,如果你只是想知道有一个零,这是更简单,只需使用

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

匹配器将从beginning.Use find匹配。

使用find将使您能够在字符串中的任意位置找到0

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

还可以根据其他答案的建议将您的正则表达式更改为"0"

+0

为什么downvoted ?????? // – vks 2015-02-11 13:19:52

+1

不是我,而是简单地改成'find'不会解决问题。 *'字符串regexp =“/ 0/g”;'* – johnchen902 2015-02-11 13:22:37

+0

@ johnchen902是的,没错。 – vks 2015-02-11 13:22:58

1

在这种特殊情况下,你并不需要一个正则表达式,因为在所有你正在寻找对于文字字符,请使用indexOf

if (Str.indexOf('0') != -1) { 
... 

你的原有格局:

正则表达式不需要被包含在Java中的分隔符之间,所以斜线无用。全局修饰符也不需要,因为全局性质取决于您选择的方法。(换句话说,为了获得几个结果的唯一方法是使用find方法在一个循环中,以获得不同的结果)

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()); 
} 

正则表达式:

enter image description here

相关问题