比较两个字符串数组以检查字符串数组中是否存在输入的值

时间:2011-03-25 08:18:05

标签: java

我有两个字符串数组

String[] Mids contains 
MSI
MSU
MSV

String[] sl contains
    MSU
    MSV
    MSS

实际输出应为

Action 
Action 
Action cannot be set

for(int i=0;i<sl.length;i++){
                for(int j=0;j<Mids.length;j++){
                    if((sl[i].equals(Mids[j]))){
                       System.out.println("Action");
                    }else{
                        System.out.println("Action cannot be set");
                    }
                }
            }

我得到的输出

Action cannot be set
Action cannot be set
Action cannot be set
Action cannot be set
Action
Action cannot be set
Action
Action cannot be set
Action cannot be set

4 个答案:

答案 0 :(得分:4)

问题是你在两个数组上进行迭代,并且如果找到相同的值,则始终打印。但是你应该只在第一个循环中这样做。我改变了for循环:

for(int i=0;i<sl.length;i++){
   boolean found = false;
   for(int j=0;j<Mids.length;j++){
      if((sl[i].equals(Mids[j]))){
         found = true;
         break;
      }
   }

   if (found) {
      stdOut.println("Action");
   } else {
      stdOut.println("Action cannot be set");
   }
}

答案 1 :(得分:1)

要说明如果在数组中找不到元素,则需要将其与所有元素进行比较。只是因为一次比较失败,你不能断定在数组中找不到它。

尝试类似:

for(int i=0;i<sl.length;i++){
        boolean found = false;
        for(int j=0;j<Mids.length;j++){
                if((sl[i].equals(Mids[j]))){
                        found = true;
                        break;
                }
        }
        if(found) {
                // print found.
        } else {
                // print not found.                                             
        }
}

答案 2 :(得分:0)

为什么不在显示s1和mids的for循环(i)下添加另一个打印行,以便更好地理解执行?

答案 3 :(得分:0)

另一种方法是使用更少的代码行和更少的迭代次数:

List<String> midsList = new ArrayList<String>(Arrays.asList(Mids));
    for (String string : sl) {
        if (midsList.contains(string)) {
            System.out.println("Action");
        } else {
            System.out.println("Action cannot be set");
        }
    }