【问题标题】:Buffered Reader, Line count, Split, Parse in JavaJava 中的缓冲读取器、行数、拆分、解析
【发布时间】:2018-12-07 15:32:23
【问题描述】:

实际上,我被分配了一个任务,其中我有一个 xyz.txt/CSV 文件,该文件基本上包含数值,我应该将它传递给 BUFFERED READER,然后拆分这些值并最终解析它们。

所以我有一个 Java 代码可以帮助我。

package javaapplication12;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class JavaApplication12 {   

    public static void main(String[] args) {

        String count= "F:\\Gephi\\number.txt";            
        BufferedReader br = null;
        FileReader fr = null;

        try {           
            fr = new FileReader(count);
            br = new BufferedReader                       

            // AT THIS POINT THERE SHOULD BE SOME THING THAT COUNTS NUMBER OF LINES USING COUNT++ OR SOMETHING LIKE THIS//    
            String sCurrentLine;    
            while ((sCurrentLine = br.readLine()) != null) {
                System.out.println(sCurrentLine);
            }                            
        }             
        catch (IOException e) {
            e.printStackTrace();
        }
        finally {
                try {
                    if (br != null)
                       br.close();

                    if (fr != null)
                       fr.close();
                } 
                catch (IOException ex) {
                    ex.printStackTrace();
                }
        }            
     }
}
                // COMING TO THIS POINT THE ABOVE VALUES OF .TXT FILE SHOULD BE SPLIT USING SPLIT PARAMETER//
               // AFTER SPLITTING THE SPLIT VALUE SHOULD BE KEPT IN AN ARRAY AND THEN EVENTUALLY PARSED//

或者如果有人可以用上述问题的另一种方式重写代码,也将不胜感激。

【问题讨论】:

  • 您可以使用StringTokenizerString.split() 将文件的每一行拆分为不同的标记并计算每个标记。见StringTokenizer.htmlString.split()
  • 是的,我知道 Str.split() 但我不知道如何或将它放在我的代码中的位置。我在编写带有拆分、计数和解析的代码时遇到了困难。
  • 欢迎来到 SO。我建议环顾四周,看看如何提出正确的问题,以增加从社区中给出一些好的答案的机会:stackoverflow.com/tourstackoverflow.com/help/how-to-ask 我看到这是给你的问题陈述,你没有甚至不要尝试自己解决。我建议您至少尝试理解问题并对其进行编码。这是学习编程的最佳方式,而不是寻求解决方案。
  • 把提到的代码放在while循环中,这里是逐行读取文件。对于每一行,对其进行标记。您还可以定义一个Map<String, Interger> 来计算每个值。
  • 谢谢您,先生,欢迎您不要急于下结论,例如我没有尝试过,我正在寻找解决方案,我从过去 7 天开始一​​直在努力,但无法没有得到适当的帮助,所以我来这里寻求帮助。即使现在我也在尝试,我想我可以拆分它,期待解析部分的帮助。

标签: java arrays parsing split bufferedreader


【解决方案1】:

这是我使用 Java 8 的解决方案:

 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.List;
 import java.util.stream.Collectors;

 public class BR {

 public static void main(String[] args) {
    String fileName = "br.txt";
    //for the csv format
    String regex = ", ";
    try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
        List<String[]> lines = br.lines()
                .map(line -> line.split(regex))
                .collect(Collectors.toList());

        parse(lines);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

private static void parse(List<String[]> lines) {
    //Do your stuff here
}

 }

BufferedReader 的初始化是在 try 块中(这种方式称为 try with resources),因为 BufferedReader 实现了 AutoCloseable(一个接口),所以万一抛出异常,reader 会关闭。

br.lines() 方法返回文件中的所有行。 在 map 函数中,您传递的是 lambda 中的 rad 行。该行使用 split 变量进行拆分(对于 CSV 格式,它是 ', ')并返回并收集。

结果是一个字符串数组列表,可以在 map 函数的主体中更改。

为了更清楚,我建议您查看一些 Java 8 教程,您将完全了解发生了什么。

此解决方案可能不适合您的知识水平(我猜),但希望它能激发您检查一些更高级和现代的方法。

祝你有美好的一天。

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多