public class Test2 {
public static void main(String[] args)
{
String country="india";
String arry[]={"indians are great","i am india","govt","dhoomindian","prashindiahim","i jdsdindi a","i n d i a"};
Pattern p = Pattern.compile(".*" + country + ".*");
for (String stringVal : arry)
{
Matcher m = p.matcher(stringVal);
System.out.println("test1..."+" -->"+stringVal+" "+m.find());
System.out.println("test2..."+" -->"+stringVal+" "+m.find());
}
}
}
OUTPUT::
*test1... -->indians are great true* ----1
**test2... -->indians are great false**-----2
*test1... -->i am india true* ----3
**test2... -->i am india false** ---4
test1... -->govt false
test2... -->govt false
test1... -->dhoomindian true----5
test2... -->dhoomindian false----6
test1... -->prashindiahim true----7
test2... -->prashindiahim false----8
test1... -->i jdsdindi a false
test2... -->i jdsdindi a false
test1... -->i n d i a false
test2... -->i n d i a false
你可以看到相同的find()方法在第一行给出true而在前面的第二行给出false。你可以从第1-8行看到行为。 任何人都可以告诉我为什么我得到了find()方法的这种行为。
答案 0 :(得分:2)
来自docs
public boolean find() 尝试查找与模式匹配的输入序列的下一个子序列。 此方法从此匹配器区域的开头开始,或者,如果前一次方法调用成功并且匹配器尚未重置,则在第一个字符与上一个匹配项不匹配时 强>
答案 1 :(得分:0)
find()
方法将搜索特定模式,如果找到则返回true,但是,如果再次调用find()
,它会继续搜索 FROM THAT POINT ONWARD 在那个字符串中。在那里,你会得到错误的bcz它无法找到它。
如果您使用find(int location)
,您可以告诉它在要搜索的字符串中的哪个位置,从而允许您根据需要多次找到相同的模式。