簡體   English   中英

比較兩個String數組,分別返回匹配的String和不匹配的String

[英]Compare two String arrays , return matched Strings and mismatched Strings separately

我正在開發一個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

我所做的可能比我應該做的要多,甚至使事情變得復雜。 但我會讓你們決定。

我要做的第一件事是使用HashSets存儲匹配和不匹配的值。 這很有用,因為它們僅存儲每個值之一。

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循環,我認為您可以將這一部分簡化為一個。 但是a,它有效。 現在說為什么 好的,此代碼的工作方式是假設數組中的所有值都沒有匹配項,除非另外證明。 因此,它只是將它們全部放入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] + " ");
}

嘗試使用數組實現的這段代碼。

    String[] number_one = { "info@fn.ca" , "+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");
    }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM