[英]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.