我正在开发一个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
答案 0 :(得分:3)
我可能做得比我应该做的更多,甚至可能让它变得复杂。但是我会让你们做出决定。
我做的第一件事是使用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循环,这部分我认为你可以简化为可能只有一个。但唉,它有效。现在至于为什么。好吧,这段代码的工作方式是假设除非另有证明,否则数组中的所有值都没有匹配。所以它只是将所有这些都放入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] + " ");
}
答案 1 :(得分:-1)
尝试使用数组实现此代码。
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");
}
}