java - 在不知道哪一个包含更多值的情况下比较两个字符串数组
问题描述
我必须在 Java 中比较两个字符串数组的值并保存不同的字符串。我已经知道如何比较相同大小的字符串数组。但问题是,这些字符串数组的值的计数在一开始是未知的。因此,尚不清楚哪个字符串数组更大。
所以我必须处理以下情况:
场景一 (大小相同,无差异):
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}
实施方案一:
for(int i = 0; i < test.length; i++){
if(! ( Arrays.asList(test).contains(test2[i]) ) ) {
} else {
System.out.println("Scenario 1");
}
}
实施方案二:
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);
但是,如果您不知道第一个字符串数组是否包含比第二个更多的元素,或者第二个字符串数组是否包含比第一个更多的元素,如何处理场景 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]);
}
解决方案
使用布尔数组来跟踪重复的字符串,并简单地检查一个数组的所有元素以查看另一个数组是否包含它。第二个数组中未使用的字符串在第一个数组中也丢失了,因此无论数组大小如何,您都可以将它们放在不同的位置。
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]);
}
}
}
推荐阅读
- java - android studio-来自片段的网络服务请求
- java - LinkedLists 中的节点引用
- javascript - Busboy 文件事件未触发,在请求正文中接收文件作为缓冲区
- java - Mockito then() should() 匹配不包括一个参数的参数
- owl - 对象属性是否有效?
- python - python数据框结果基于2个不同列的值
- php - 我如何在 Php 值中循环 Json 对象键
- c# - UWP 多实例与多视图
- php - 对 PHP API 的 Axios GET 请求不适用于自定义标头
- python - 使用 PyInstaller 添加通过 __load__ 加载的依赖数据文件