java - 比较两个字符串数组,分别返回匹配的字符串和不匹配的字符串

标签 java android arrays

我正在开发一个Android应用程序。我正在尝试比较两个字符串数组并返回匹配项和不匹配项。 我尝试了几种解决方案,但根本不起作用。我需要分别匹配和不匹配。

这是带有示例数据的数组

String[] number_one = { "info@fn.ca" , "+122637867"  , "486" , "smbr" , "9946567" };

String[] number_two = { "+122637867" , "486" , "nrkZone"  , "smbr'};

这是我正在处理的示例代码。

          for(int n =0; n < number_one.length; n++){

            if(number_one[n] == number_two[n]){
                 Log.d("Cursor" ,number_one[n]);
            }else{
                 Log.d("Cursor" ,number_two[n]);
             }

           }

我想要像(示例数据)这样的输出

 Matched : +122637867 , 486 , smbr
 Mismatched :  info@fn.ca , nrkZone , 9946567

最佳答案

我可能做了超出我应该做的事情,甚至可能让它变得过于复杂。但我会让你们决定。

我做的第一件事是使用 HashSet 来存储匹配和不匹配的值。这很有用,因为它们只存储每个值之一。

String[] number_one = { "info@fn.ca" , "+122637867"  , "486" , "smbr" , "9946567" };
String[] number_two = { "+122637867" , "486" , "nrkZone"  , "smbr"};


HashSet<String> matched = new HashSet<String>();
HashSet<String> mismatched = new HashSet<String>();

现在我有相当多的 for 循环,我认为这部分你可以简化为也许只有一个。但可惜的是,它确实有效。现在说说为什么。好吧,这段代码的工作方式是假设数组中的所有值都没有匹配项,除非另有证明。所以它只是将它们全部放入不匹配 HashSet 中。

for (int i = 0; i < number_one.length; i++) {
    mismatched.add(number_one[i]);
}

for (int i = 0; i < number_two.length; i++) {
    mismatched.add(number_two[i]);
}

现在您需要嵌套两个 for 循环来迭代两个数组,并在此过程中检查是否有匹配项,如果有,则将其添加到 matched HashSet 中。

for(int n = 0; n < number_one.length; n++) {
       for (int m = 0; m < number_two.length; m++) {
           if(number_one[n].equals(number_two[m])){
            matched.add(number_one[n]);
           }
       }
   }

现在,我们只需从 mismatched 变量中删除我们知道匹配的所有值,该变量已经具有所有可能的值。我们只是删除我们知道的匹配项。

for (int i = 0; i < matched.size(); i++) {
    mismatched.remove(matched.toArray()[i]);
}

在这里,我们只是以半整洁的方式打印它们。

System.out.print("Matched: ");
for (int i = 0; i < matched.size(); i++) {
    System.out.print(matched.toArray()[i] + " ");
}

System.out.println("");
System.out.print("Mismatched: ");
for (int i = 0; i < mismatched.size(); i++) {
    System.out.print(mismatched.toArray()[i] + " ");
}

关于java - 比较两个字符串数组,分别返回匹配的字符串和不匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34237527/

相关文章:

javascript - 如何将数组推送更改为特定数组?

java - @InjectMocks @Autowired 在一起问题

java - Eclipse JSP 预览

android - 如何在 Android 应用程序中创建通知数量?

java - 在 Android 上将视频录制帧速率设置为 1

java - 嵌套循环错误 - java

Javascript:使用递归将多维数组就地展平

Java如何使图形对象朝其面向的方向移动

java - 如何为一个巨大的字符串列表计算一个好的哈希码?

java - 设置 Activity 中的 if()