2015-12-12 206 views
0

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

下面是与例如数据

String[] number_one = { "[email protected]" , "+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 : [email protected] , nrkZone , 9946567 
+0

你到底想要什么结果? –

+1

使用“equals”来比较字符串值。同样,因为你的代码是,你将只匹配令牌,如果他们在阵列中具有相同的位置。它是你想要的吗? – Berger

+0

不,我想找到匹配的字符串从两个阵列和无与伦比的字符串.. @HojjatImani –

回答

3

我可能没有比我更应该有,甚至可能使它过于复杂。但我会让你们决定。

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

String[] number_one = { "[email protected]" , "+122637867" , "486" , "smbr" , "9946567" }; 
String[] number_two = { "+122637867" , "486" , "nrkZone" , "smbr"}; 


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

现在我有很多循环,这部分我想你可以简化成也许只是一个。但是,唉,它的工作。现在至为什么。那么,这种代码的工作方式是,假设数组中的所有值都没有匹配,除非证明相反。所以它只是把它们放到了mismatched 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] + " "); 
} 
+0

这只打印几个匹配。 –

+0

@SijoJohn你是什么意思?这对我来说可以。要么你错用了,要么我不明白你在做什么。 – Zachery

+0

我的android应用程序中有两个数组。有时候一个数组会比第二个数组大一些。因此,循环退出并打印前几个匹配的元素,其余的将与无与伦比的打印。 @zachery –

-1

尝试使用数组实现此代码。

String[] number_one = { "[email protected]" , "+122637867" , "486" , "smbr" , "9946567" }; 
    String[] number_two = { "+122637867" , "486" , "nrkZone" , "smbr"}; 
    boolean mismatch=true; 
    for(int i=0;i<number_one.length;i++){ 
     mismatch=true; 
     for(int j=0;j<number_two.length;j++){ 
     if(number_one[i].equals(number_two[j])){ 
      System.out.println(number_one[i]+"Matches"); 
     mismatch=false; 
     break; 
     } 
     } 
    if(mismatch){ 
     System.out.println(number_one[i]+"Mis Matches"); 
    } 
    }