Java 如何修复内容的错误输出。等于?
我试图让Java读取目录中的所有文件,并将文件名与字符串列表进行比较,如果文件名与列表中的字符串相同,则应输出文件名+“hit”。现在我只找到了一个文件 文件夹命中包含: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg 列表lijst.txt包含: foto5.jpeg yH1laMN0s7g.jpeg RdrzTHAvcQg.jpeg 所以我应该得到: foto5命中! RDRZTAVCQG命中! yH1laMN0s7g命中 但我现在得到的是: foto5* RDRZTAVCQG命中! yH1laMN0s7g* 我尝试过使用编码,现在是UTF-8。但我认为这不是问题所在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
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文件没有扩展名。我这边的信息不对,对不起!谢谢你的回复!