Java 如何修复内容的错误输出。等于?

Java 如何修复内容的错误输出。等于?,java,arraylist,filenames,string-comparison,Java,Arraylist,Filenames,String Comparison,我试图让Java读取目录中的所有文件,并将文件名与字符串列表进行比较,如果文件名与列表中的字符串相同,则应输出文件名+“hit”。现在我只找到了一个文件 文件夹命中包含: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg 列表lijst.txt包含: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg 所以我应该得到: foto5命中! RDRZTAVCQG命中! yH1laMN0s7g命中 但我现在得到的是: fot

我试图让Java读取目录中的所有文件,并将文件名与字符串列表进行比较,如果文件名与列表中的字符串相同,则应输出文件名+“hit”。现在我只找到了一个文件

文件夹命中包含: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg

列表lijst.txt包含: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg

所以我应该得到: foto5命中! RDRZTAVCQG命中! yH1laMN0s7g命中

但我现在得到的是: foto5* RDRZTAVCQG命中! yH1laMN0s7g*

我尝试过使用编码,现在是UTF-8。但我认为这不是问题所在

 public static void main(String[] args) {
    // TODO Auto-generated method stub
    String hit = ""; // empty string

    File files = new File("C:\\Users\\bram\\Pictures\\hit");
    File[] sourceFiles = files.listFiles();  // the files in the map hit java reads

    List<String> lines = new ArrayList<String>();
    try {
        lines = FileUtils.readLines(new File("C:\\lijst.txt"), "utf-8");
    } catch (IOException e2) {
    }  // java reads strings in the list

    for (File x: sourceFiles) {  // java iterates through all the files in the folder hits. 

        String names = x.getName().replaceAll("\\.[^.]*$", "").toString(); 
        // java gets the filenames and converts them to strings without the extension

        for (String a : lines) // for all strings in the list:
        {   
            //System.out.println(a);
            if(names.contentEquals(a))  // if the name is equel to one of the strings in the list it generates a hit
            {
                hit = "Hit!";
            }else {
                hit = "*";              // no hit is * 
            }
        }

    System.out.println(x.getName().replaceAll("\\.[^.]*$", "").toString() +"         "+ hit); // print the results

    }

  }

  }
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
String hit=”“;//空字符串
File files=新文件(“C:\\Users\\bram\\Pictures\\hit”);
File[]sourceFiles=files.listFiles();//映射中的文件命中java读取
列表行=新的ArrayList();
试一试{
lines=FileUtils.readLines(新文件(“C:\\lijst.txt”),“utf-8”);
}捕获(IOE2异常){
}//java读取列表中的字符串
对于(filex:sourceFiles){//java遍历文件夹中的所有文件。
字符串名称=x.getName().replaceAll(“\\..[^.]*$”,“”)。toString();
//java获取文件名并将其转换为不带扩展名的字符串
for(String a:lines)//对于列表中的所有字符串:
{   
//系统输出打印项次(a);
if(names.contentEquals(a))//如果名称等于列表中的一个字符串,则生成命中
{
hit=“hit!”;
}否则{
hit=“*”;//没有命中*
}
}
System.out.println(x.getName().replaceAll(\\.[^.]*$,“”)。toString()+“”+hit);//打印结果
}
}
}

你把事情复杂化了。尽管txt文件包含图像文件的全名,但为什么要删除文件扩展名?为什么是嵌套for循环?下面这样的东西不够吗

for (File x : sourceFiles) {            
        if(lines.contains(x.getName())){
            System.out.println(x.getName()+"\t Hit!");
        }
        else{
            System.out.println(x.getName()+"\t *");
        }
    }

好吧,对不起,伙计们。。这是漫长的一天。带有字符串的列表不包含任何扩展名。我这边的信息不对,对不起

我现在让它工作了,只是在for循环中做了一个简单的中断。谢谢你的回复

for (String a : lines) // for all strings in the list:
        {   
            //System.out.println(a);
            if(names.contentEquals(a))  
            {
                hit = "Hit!";
                break;
            }else {
                hit = "*";              // no hit is * 
            }

        }

你试过调试你的代码吗?或者,可能只是将一个sysout与您正在比较的值放在一起,这些值不相等?我打赌他们不平等;-)如果您怀疑方法
contentEquals(String)
返回错误,则可以在此处显示该方法。因为您在每行之后都更改了“hit”变量,所以只输出最后一行的结果。当我打印名称(String)和(String)时,我可以看到字符串都是相同的。也许这与Java检查的顺序有关。顺便说一下,我对编程还不熟悉:)最后一个sysout应该是:(name+“”+hit)是的,我的txt文件没有扩展名。我这边的信息不对,对不起!谢谢你的回复!