识别文本文件中的重复数字

Kir*_*hat 1 java hashmap

在这里,我编写了Java代码,以在文本文件中显示重复的数字.这里我硬编码了文本文件的路径名.我假设文本文件只包含文本文件的每一行中的数字.

我只想显示那些重复的数字.代码如下所示:

import java.util.*;
import java.io.*;

public class FileRead {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    HashMap<String,String> lines=new HashMap<String,String>();

    try{
        FileInputStream fstream=new FileInputStream("C:/Users/kiran/Desktop/text.txt");
        DataInputStream in=new DataInputStream(fstream);
        BufferedReader br=new BufferedReader(new InputStreamReader(in));
        ArrayList arr=new ArrayList();
        String str,str1;
        int i=0;
        while((str=br.readLine())!=null){
            i++;
            str1=Integer.toString(i);
            if(lines.containsValue(str)){
                System.out.println(str);
            }else{
                lines.put(str1, str);
            }
        }
        in.close();
    }catch(Exception e){
        System.out.println(e);
    }

}
}
Run Code Online (Sandbox Code Playgroud)

文本文件的内容如下所示:

 56
 75
 1
 46
 100
 97
 75
 46
 46
Run Code Online (Sandbox Code Playgroud)

预期产出是:

 75
 46
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

 75
 46
 46
Run Code Online (Sandbox Code Playgroud)

我无法找出程序中的错误.谁能帮我??

das*_*ght 5

你需要跟踪你打印的内容,例如a HashSet<String>.

Set<String> seen = new HashSet<String>()在顶部声明,然后添加if:

if(lines.containsValue(str)){
    if (seen.add(str)) {
        System.out.println(str);
    }
} else {
    lines.put(str1, str);
}
Run Code Online (Sandbox Code Playgroud)

更简单的解决方案是删除else:

if(lines.containsValue(str)){
    System.out.println(str);
}
lines.put(str1, str);
Run Code Online (Sandbox Code Playgroud)