我有一个保存在2d数组中的字符串集合。
该字符串具有喇叭形的形状,并且完整的字符串可以采用Patient(?x)以及hasdoctor(?x,?y)的形式

如果我写?x = alex和?y = john,那么上面的字符串采用的结构为

患者(alex)
hasdoctor(alex,约翰)

现在的问题是,何时使用下面的代码查找?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]);
           }
}}


我可以解释我想要在Java中的伪代码是

if([?]\\w[,) is found in array[][])
  if([?]\\w[,) is already in other_array[]
    Then skip;
  else
    save [?]\\w[,) to other_array[]

最佳答案

不能说我完全理解您要达到的目标,但我认为问题在于您正在使用

if (z.find()) { /* ... */ }


代替

while (z.find()) { /* ... */ }


使用if,该字符串将不会被完全消耗掉,并且在找到第一个匹配项后将返回。

07-24 14:56