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;i isFound=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;i isFound=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,即