Java 在比较两个数组时,如何显示另一个数组中缺少的字符串?

Java 在比较两个数组时,如何显示另一个数组中缺少的字符串?,java,arrays,Java,Arrays,我试图比较两个数组并显示哪些条目存在,哪些不存在 例如,我的两个数组包含以下内容: logArray: Test1, Test2, Test3, Test4, Test5 checkArray: Test1, Test2, Test3, Test4, Test5, Test6, Test7 我试图实现的结果是以下输出: FOUND: Test1 FOUND: Test2 FOUND: Test3 FOUND: Test4 FOUND: Test5 NOT FOUND: Test6 NOT FO

我试图比较两个数组并显示哪些条目存在,哪些不存在

例如,我的两个数组包含以下内容:

logArray: Test1, Test2, Test3, Test4, Test5
checkArray: Test1, Test2, Test3, Test4, Test5, Test6, Test7
我试图实现的结果是以下输出:

FOUND: Test1
FOUND: Test2
FOUND: Test3
FOUND: Test4
FOUND: Test5
NOT FOUND: Test6
NOT FOUND: Test7
我想我与我的代码很接近,但有些地方不太对劲,而“未找到”显示了一个荒谬的数量

    for (int i = 0; i < logArray.length; i++) {
        for (int x = 0; x < checkArray.length; x++) {
            if (logArray[i].equals(checkArray[x])) {
                logsFound = logsFound + 1;
                modelFound.addElement("<html><font color=#009933>FOUND: </font> " + logArray[x] + "</html>");
            }
        }
        if (isFound == false) {
            logsNotFound = logsNotFound + 1;
            modelNotFound.addElement("<html><font color=#FF0000>NOT FOUND: </font> " + logArray[i] + "</html>");
        }         
    }
for(int i=0;i
编辑:根据一些注释进行了调整,现在它会正确显示未找到的数量,但是如果未找到的数量在第一个数组数量内,它只会显示未找到的数量。所以,因为我的logsArray包含9个项目,而checkArray包含10个项目(如清单中所示),所以它在NOT FOUND中总共显示4个项目。所以它也要显示2VA.004.01.16

isFound在for循环之前声明

更新代码:

    for (int i = 0; i < logArray.length; i++) {
        isFound = false;
        for (int x = 0; x < checkArray.length; x++) {
            if (logArray[i].equals(checkArray[x])) {
                logsFound = logsFound + 1;
                modelFound.addElement("<html><font color=#009933>FOUND: </font> " + logArray[x] + "</html>");
                isFound = true;
            }
        }
        if (isFound == false) {
            logsNotFound = logsNotFound + 1;
            modelNotFound.addElement("<html><font color=#FF0000>NOT FOUND: </font> " + checkArray[i] + "</html>");
        }
    }
for(int i=0;i
发现的始终为false,因为它从未被修改过

您还可以在遍历checkArray时检查logArray中是否存在项

List logList=Arrays.asList(logArray);
用于(字符串项:checkArray)
{
如果(!logList.contains(项)){
系统输出打印(“非”);
}
系统输出打印(“找到:“+项+”\n”);
}

发现的始终为false,因为它从未被修改过

您还可以在遍历checkArray时检查logArray中是否存在项

List logList=Arrays.asList(logArray);
用于(字符串项:checkArray)
{
如果(!logList.contains(项)){
系统输出打印(“非”);
}
系统输出打印(“找到:“+项+”\n”);
}

您似乎没有为循环中的isFound分配任何值。

您似乎没有为循环中的isFound分配任何值。

当在日志数组中找到值时,您应该将isFound设置为true

for (int i = 0; i < logArray.length; i++) {
    for (int x = 0; x < checkArray.length; x++) {
            if (logArray[i].equals(checkArray[x])) {
                isFound = true; // <-Add this, because right now logsNotFound is incremented no matter what without this statement
                logsFound = logsFound + 1;
                modelFound.addElement("<html><font color=#009933>FOUND: </font> " + logArray[x] + "</html>");
            }
    }
    if (isFound == false) {
                logsNotFound = logsNotFound + 1;
                modelNotFound.addElement("<html><font color=#FF0000>NOT FOUND: </font> " + logArray[i] + "</html>");


    }
    isFound = false;
}
for(int i=0;iisFound=true;//当在logsArray中找到一个值时,应该将isFound设置为true

for (int i = 0; i < logArray.length; i++) {
    for (int x = 0; x < checkArray.length; x++) {
            if (logArray[i].equals(checkArray[x])) {
                isFound = true; // <-Add this, because right now logsNotFound is incremented no matter what without this statement
                logsFound = logsFound + 1;
                modelFound.addElement("<html><font color=#009933>FOUND: </font> " + logArray[x] + "</html>");
            }
    }
    if (isFound == false) {
                logsNotFound = logsNotFound + 1;
                modelNotFound.addElement("<html><font color=#FF0000>NOT FOUND: </font> " + logArray[i] + "</html>");


    }
    isFound = false;
}
for(int i=0;iisFound=true;//您可以构建一次哈希集,以加快搜索速度

Set<String> set = new HashSet<String>(logArray);
for(String item : checkArray)
{
    if (set.contains(item)){
        //emit found
    } else {
        //emit not found
    }
}
Set Set=newhashset(logArray);
用于(字符串项:checkArray)
{
if(集合包含(项目)){
//发射发现
}否则{
//找不到发射
}
}

您可以构建一次哈希集,以加快搜索速度

Set<String> set = new HashSet<String>(logArray);
for(String item : checkArray)
{
    if (set.contains(item)){
        //emit found
    } else {
        //emit not found
    }
}
Set Set=newhashset(logArray);
用于(字符串项:checkArray)
{
if(集合包含(项目)){
//发射发现
}否则{
//找不到发射
}
}

我认为在检查checkArray中的所有项目之前,您应该假设isFound为false,然后如果您找到了该项目,则应将isFound设置为true

for (int i = 0; i < logArray.length; i++) {
    isFound = false;
    for (int x = 0; x < checkArray.length; x++) {
        if (logArray[i].equals(checkArray[x])) {
            logsFound = logsFound + 1;
            modelFound.addElement("<html><font color=#009933>FOUND: </font> " + logArray[x] + "</html>");
            isFound = true;
        }
    }
    if (isFound == false) {
        logsNotFound = logsNotFound + 1;
        modelNotFound.addElement("<html><font color=#FF0000>NOT FOUND: </font> " + logArray[i] + "</html>");
    }         
}
for(int i=0;i
我认为在检查checkArray中的所有项目之前,您应该假设isFound为false,然后如果您找到了该项目,则应将isFound设置为true

for (int i = 0; i < logArray.length; i++) {
    isFound = false;
    for (int x = 0; x < checkArray.length; x++) {
        if (logArray[i].equals(checkArray[x])) {
            logsFound = logsFound + 1;
            modelFound.addElement("<html><font color=#009933>FOUND: </font> " + logArray[x] + "</html>");
            isFound = true;
        }
    }
    if (isFound == false) {
        logsNotFound = logsNotFound + 1;
        modelNotFound.addElement("<html><font color=#FF0000>NOT FOUND: </font> " + logArray[i] + "</html>");
    }         
}
for(int i=0;i
如果您想使用集合,这里有一个简单的解决方案

String[] one = {"Test1", "Test2"};
String[] two= {"Test1", "Test2", "Test3", "Test4", "Test5"};
ArrayList<String> missingCodes = new ArrayList<>(Arrays.asList(two));
missingCodes.removeAll(Arrays.asList(one));
System.out.println(missingCodes);

如果您想使用集合,这里有一个简单的解决方案

String[] one = {"Test1", "Test2"};
String[] two= {"Test1", "Test2", "Test3", "Test4", "Test5"};
ArrayList<String> missingCodes = new ArrayList<>(Arrays.asList(two));
missingCodes.removeAll(Arrays.asList(one));
System.out.println(missingCodes);
我更喜欢的解决方案是,但是如果您尝试使用阵列,这里有一些东西需要修改,以使其按预期工作

在循环中,isFound布尔值似乎从未设置为true,因此无法不显示NOT FOUND。此外,isFound需要在每个循环的开头初始化为false。 一旦找到该值,您就希望打破循环以获得更好的性能,因此在找到该值后抛出一个中断

想法: 尽量不要使用像i和x这样的索引。您会注意到,在原始代码中,x索引应用于i数组,如果数组大小不合适,这将导致ArrayIndexOutOfBoundsException。根据设计,较长的数组必须是logArray,即