我创建了这个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 elementOfThefirstList
和elementOfTheSecondList
都是各自列表中的元素。
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;。但是,我无法用变量做到这一点。
答案 0 :(得分:1)
根据您提供的有关如何解决此问题的信息,关于如何解决这个问题几乎没有什么可说的。我强烈建议您在继续前进之前先查看this量词教程。
让我们看看一些解决方案。
if(this.answer.matches("(?i).*" + string + ".*"))
this.answer
是否包含string
,忽略大小写(我怀疑你需要最后一个。*)。但是你使用 Greedy Quantifier 来比较它们。如果由于此比较中的输入错误而引起问题,我会考虑查看 Reluctant Quantifiers 的链接教程。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
}
}
userInput
有contains
方法,但我认为你使用包含来调用String
方法。如果是这种情况,可以找到问题的解决方案。当且仅当等于第一个列表中的元素和第二个字符串中的匹配元素时,您才需要声明它是有效的。split
连接String
并检查结果数组包含的元素数量。如果它大于2,则表示连接无效。希望这有帮助!