java - txt 文件中的多个字符串搜索(java)

标签 java loops comparison readline

BufferedReader br2 = new BufferedReader(
    new InputStreamReader(new FileInputStream(id_zastavky), "windows-1250")
);  

for (int i = 0; i < id_linky_list.size(); i++) 
{
    while ((sCurrentLine2 = br2.readLine()) != null) 
      {
         String pom = id_linky_list.get(i);                     
         String[] result = sCurrentLine2.split("\\|");
         if((result[1].toString()).equals(pom.toString()))
         {
            System.out.println(result[1].toString()+"   " +pom.toString() + "  " + result[3]);
         }
      }
}
br2.close();

嘿伙计们。任何人都可以给我建议,为什么我的 FOR 循环仅使用 id_linky_list a 中的第一项然后退出?我认为问题出在这一行

while ((sCurrentLine2 = br2.readLine()) != null)

。我的列表中有超过 5000 个项目,我需要比较它们是否存在于我的 txt 文件中。如果我运行我的应用程序,for 循环仅获取第一项。我应该如何修改我的代码才能使其正常工作?感谢您的帮助。

最佳答案

在 for 循环的第一次迭代期间,将读取整个文件,并且 br2.readLine() 在下一次迭代中将始终返回 null。

如果文件很小,您可以构建一个 map ,然后可以使用该 map 来检查内容

    File file = new File("filename");
    List<String> lines = Files.linesOf(file, Charset.defaultCharset());
    Map<String, List<String>> map = lines.stream().collect(Collectors.groupingBy(line -> line.split("\\|")[1]));
    List<String> id_linky_list = null;
    for (int i = 0; i < id_linky_list.size(); i++) {
        if (map.get(id_linky_list.get(i)) != null) {
            //sysout
        }
    }

更新

Map<String, List<String>> text = Files.lines(file.toPath(), Charset.forName("windows-1250")).collect(Collectors.groupingBy(line -> line.split("\\|")[1]));

关于java - txt 文件中的多个字符串搜索(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40048730/

相关文章:

java - 检查 int 是否为素数 Java

java - 如何在java中比较2个JSON文件的值

java - Spring Tomcat 多个 HTTPS 端口

java - 在 JFrame 和 JPanel 之间添加空间

java - 使用 GSON 反序列化嵌套 JSON 字符串

java - 输入不匹配异常?

c - 如何跳转到代码开头?

php - MySQL 查询,我将多条记录添加到一条记录

c - *完全*相等的 double 为 (a==b) 返回 0

mysql 比较相似字符串的函数