如何检查String是否在String数组中? (JAVA)
用户应该能够输入颜色,然后程序应检查输入的颜色是否在数组内。
例如:
USER INPUTS:黑色
程序检查黑色是否在颜色数组中
计划输出:黑色
否则
PRORGAM OUTPUTS:抱歉,黑色无法识别。
commands []是一个参数化数组。 如果用户输入“圆圈颜色黑色”,则圆圈存储在数组位置[0]中,颜色存储在数组位置[1]中,黑色存储在位置[2]中,依此类推......
private String[] colours = {"black", "blue", "green", "magenta", "red", "white", "yellow"};
/**
* Checks if the typed in colour is valid.
*/
public void checkColour(String[] commands)
{
String varifiedColour = null;
if(commands[1].equals("colour")){
for(int i = 0; i < colours.length; i++){
if(commands[2].contains(colours[i])){
varifiedColour = colours[i];
//Prints varifiedColour to check if this method works.
System.out.println(varifiedColour);
}
}
}
}
答案 0 :(得分:1)
您为什么使用String#contains
?你的程序应该像
for (String color : colors) {
if (color.equals(input)) {
return true;
}
}
return false;
此外,如果这不是玩具程序,请注意拼写差异 - 例如,将输入和颜色标准化为小写并且没有周围的空白。
答案 1 :(得分:0)
尝试像这样使用第二个if
删除 for(int i = 0; i < colours.length; i++){
for(int j = 0; j < commands.length; j++){
if(commands[j].contains(colours[i])){
varifiedColour = colours[i];
//Prints varifiedColour to check if this method works.
System.out.println(varifiedColour);
}
}
}
,如下所示:
.menu-item
答案 2 :(得分:0)
我个人没有发现您的代码有任何问题,但我相信您的 checkColour()方法参数存在问题。该方法由一个参数(不是三个似乎可以想到)组成,命令参数显然需要将一个String数组传递给它。
因此,这意味着无论用户输入的是什么(您都不能显示代码的一部分),都必须进行“分割”。使用 String .split()方法,以便将该输入放入字符串数组中。这样输入将根据需要分解为数组元素。然后该字符串数组作为参数传递给 checkColour()方法,例如:
如果用户输入(可能来自控制台输入)是这样的字符串:&#34;圈颜色黑&#34;然后它必须放入一个字符串数组,如下所示:
String[] userInput.split(" ");
现在将这个String数组传递给 checkColour()方法,如下所示:
checkColour(userInput);
在 checkColour()方法中,您还需要更改if-then条件语句:
if(commands[2].contains(colours[i])){ ....
对此:
if(commands[2].toLowerCase().equals(colours[i].toLowerCase())){ ....
String .contains()方法在这里真的不是一个好选择,因为如果用户提供的颜色让我们说&#34;灰& #34;然后是颜色&#34;灰色&#34;和&#34; lightgray&#34;对于 if-then 语句将证明是正确的,因为字符串&#34; grey&#34;确实包含在字符串&#34; lightgray&#34;中。您希望比此更精确,因此请使用 String .equals()方法。
您还会注意到我已将 String .toLowercase()方法添加到 if-then 。这样可以确保无论用户提供颜色的字母是什么,都会与 colors [] 字符串数组中的内容进行正确比较,即使中存在字母大小写差异colors [] 数组本身。