2015-12-12 204 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"); 
    } 
    }