我必须比较Java中两个字符串数组的值并保存不同的字符串。 我已经知道如何比较相同大小的字符串数组。 但是问题是,这些字符串数组的值计数在一开始是未知的。因此,不清楚哪个字符串数组更大。
所以我必须处理以下情况:
方案1 (大小相同,没有区别):
String[] test = {Test1, Test2, Test3}
String[] test2 = {Test1, Test2, Test3}
方案2(大小相同,但有所不同):
String[] test = {Test1, Test2, Test3}
String[] test2 = {Test1, Test2, Test4}
方案3(大小不同-第一个字符串数组比第二个字符串数组包含更多的值):
String[] test = {Test1, Test2, Test3}
String[] test2 = {Test1, Test2}
方案4(大小不同-第二个字符串数组比第一个字符串数组包含更多的值):
String[] test = {Test1, Test2}
String[] test2 = {Test1, Test2, Test3}
实施方案1:
for(int i = 0; i < test.length; i++){
if(! ( Arrays.asList(test).contains(test2[i]) ) ) {
} else {
System.out.println("Scenario 1");
}
}
实施方案2:
ArrayList<String> compare_String = new ArrayList<>();
for(int i = 0; i < test.length; i++){
if(! ( Arrays.asList(test).contains(test2[i]) ) ) {
compare_String.add(test2[i]);
System.out.println("Scenario2");
} else {
System.out.println("Scenario 1");
}
} System.out.println(compare_String);
但是,如果您不知道第一个String Array包含的元素多于第二个String Array,或者第二个String Array包含的元素多于第一个,该如何处理方案3和4?
非常感谢。
更新: 非常感谢你的回答。这对我有用:
ArrayList<String> difference = new ArrayList<>();
int j = 0;
if (test > test2) {
try {
for (int i = 0; i < test; i++) {
if (!(Arrays.asList(test2).contains(test1[i]))) {
difference.add(test[i]);
}
j++;
}
} catch (ArrayIndexOutOfBoundsException ar) {
difference.add(test[j]);
}
答案 0 :(得分:1)
使用一个布尔数组来跟踪重复的字符串,只需检查一个数组的所有元素以查看另一个是否包含它。第二个数组的未使用字符串也丢失了,因此,无论数组大小如何,都可以将它们放在不同的位置。
String[] array1;
String[] array2;
ArrayList<String> diff = compare_arrays(array1, array2);
public ArrayList<String> compare_arrays(String[] a1, String[] a2){
ArrayList<String> diff = new ArrayList<String>();
boolean[] rep = new boolean[a2.length];
Arrays.fill(a2, false);
for(String str : a1){
if(!Arrays.asList(a2).contains(str)){
diff.add(str);
}
else{
rep[Arrays.asList(a2).indexOf(str)] = true;
}
}
for(int i = 0; i < a2.length; i++){
if(!rep[i]){
diff.add(a2[i]);
}
}
}
答案 1 :(得分:1)
我已经实现了compareArrays方法来处理您的情况,请尝试按照以下说明解决您的问题
public class Test
{
public static void main(String[] args){
compareArrays(new String[]{"Test1", "Test2", "Test3"},new String[]{"Test1", "Test2", "Test3"});
compareArrays(new String[]{"Test1", "Test2", "Test3"},new String[]{"Test1", "Test2", "Test4"});
compareArrays(new String[]{"Test1", "Test2", "Test3"},new String[]{"Test1", "Test2"});
compareArrays(new String[]{"Test1", "Test2"},new String[]{"Test1", "Test2", "Test3"});
}
private static void compareArrays(String[] test,String[] test2){
if(test.length > test2.length){
System.out.println("Scenario 3");
}
else if(test2.length > test.length){
System.out.println("Scenario 4");
}
else {
boolean same = true;
for (int a=0;a<test.length;a++){
if(!test[a].equalsIgnoreCase(test2[a])){
same = false;
}
}
if (same){
System.out.println("Scenario 1");
}
else {
System.out.println("Scenario 2");
}
}
}
}