带有多变量和字符串

时间:2016-06-24 21:05:12

标签: java regex arraylist user-controls

我创建了这个Java方法:

public String isInTheList(List<String> listOfStrings)
{
    /*
     * Iterates through the list, and if the list contains the input of the user,
     * it will be returned.      
     */
    for(String string : listOfStrings)
    {
        if(this.answer.matches("(?i).*" + string + ".*"))
        {
            return string;
        }
    }    
    return null;     
}

我在while块中使用此方法以验证用户输入。我想检查该输入是否与ArrayList的两个不同预定义String的串联相匹配。

输入格式必须如下:

  (elementOfThefirstList + " " + elementOfTheSecondList) 

其中String s elementOfThefirstListelementOfTheSecondList都是各自列表中的元素。

for(int i = 0; i < firstListOfString.size(); i++)
{
     if(userInput.contains(firstListOfString.get(i) + " " + userInput.isInTheList(secondListOfString)))
     {  
         isValid = true;//condition for exit from the while block
     }
}

如果用户输入如下:

  

elementOfThefirstList +&#34; &#34; + elementOfTheSecondList

但是,如果用户输入如下,它也会起作用:

  

elementOfThefirstList +&#34; &#34; + elementOfTheSecondList +&#34; &#34; + anotherElementOfTheFirstList

如何修改我的正则表达式以及我的方法,以便在两个列表中只有一个重复的元素与它们之间的空格连接?

我尝试了另一个正则表达式,我认为我将使用它:&#34; {1}&#34;。但是,我无法用变量做到这一点。

1 个答案:

答案 0 :(得分:1)

根据您提供的有关如何解决此问题的信息,关于如何解决这个问题几乎没有什么可说的。我强烈建议您在继续前进之前先查看this量词教程。

让我们看看一些解决方案。

  1. 例如,让我们看看这一行:if(this.answer.matches("(?i).*" + string + ".*"))
    您要做的是查看this.answer是否包含string,忽略大小写(我怀疑你需要最后一个。*)。但是你使用 Greedy Quantifier 来比较它们。如果由于此比较中的输入错误而引起问题,我会考虑查看 Reluctant Quantifiers 的链接教程。
  2. 好的,所以这不是一个量词问题。另一个可能的修复可能是这段代码: for(int i = 0; i < firstListOfString.size(); i++) { if(userInput.contains(firstListOfString.get(i) + " " + userInput.isInTheList(secondListOfString))) { isValid = true;//condition for exit from the while block } }
    我不知道你userInputcontains方法,但我认为你使用包含来调用String方法。如果是这种情况,可以找到问题的解决方案。当且仅当等于第一个列表中的元素和第二个字符串中的匹配元素时,您才需要声明它是有效的。
  3. 我给你的最终解决方案很简单。 如果列表元素中没有其他空格,您可以在空格上split连接String并检查结果数组包含的元素数量。如果它大于2,则表示连接无效。
  4. 希望这有帮助!