我有一个以2d数组保存的字符串集合。 该字符串具有horn-clause的形状,完整的一个字符串可以是患者(?x)以及hasdoctor(?x,?y)的形式
如果我写了?x = alex和?y = john,那么上面的字符串采用
的结构患者(亚历克斯) hasdoctor(亚历克斯,约翰)
现在问题是什么时候使用下面的代码找到?x,但是在hasdoctor(?x,?y)中它跳过了?y。
void find_var(String[][] temp)
{
System.out.println(temp.length);
System.out.println(temp[0].length);
for(int i=0;i<temp.length;i++)
for(int j=1;j<temp[0].length-1;j++)
{
String text_to_parse=temp[i][j];
Pattern y = Pattern.compile("[?]\\w[,)]");
Matcher z= y.matcher(text_to_parse);
if(z.find())
{
System.out.println("Found at::"+temp[i][j]);
System.out.println(z.group());
}
else
{
System.out.println("Not found at::"+temp[i][j]);
}
}}
pesudo代码我可以在java中解释我想要的
if([?]\\w[,) is found in array[][])
if([?]\\w[,) is already in other_array[]
Then skip;
else
save [?]\\w[,) to other_array[]
答案 0 :(得分:0)
不能说我完全理解你想要实现的目标,但我认为问题在于你正在使用
if (z.find()) { /* ... */ }
而不是
while (z.find()) { /* ... */ }
使用if
,字符串不会被完全消耗,并且会在找到第一个匹配项后返回。