【问题标题】:How to parse 2 columns of ints in a txt file如何解析 txt 文件中的 2 列整数
【发布时间】:2016-04-18 03:34:06
【问题描述】:

我在 .txt 文档中得到了一组数据,格式如下:

0   1
0   3
0   4
0   5
0   6
0   7

...等等

我的问题是,我怎样才能解析这个,以便将整数的左列放入数组中,同样将右列的数字放入数组中。每对数字都有自己的一行。

在我给出的这组数据中,int[] leftColumn 将全为零,int[] rightColumn 将包含 1, 3, 4, 5 ,6 ,7。

【问题讨论】:

    标签: java parsing int


    【解决方案1】:

    java.util.Scanner 已经为您完成了大部分繁重的工作,只需使用它即可:

    List<Integer> leftColumnTmp = new LinkedList<>();
    List<Integer> rightColumnTmp = new LinkedList<>();
    try (Scanner sc = new Scanner("myfile.txt")) {
        while (sc.hasNextLine()) {
            leftColumnTmp.add(sc.nextInt());
            rightColumnTmp.add(sc.nextInt());
        }
    }
    
    int[] leftColumn = leftColumnTmp.stream().mapToInt(Integer::intValue).toArray();
    int[] rightColumn = rightColumnTmp.stream().mapToInt(Integer::intValue).toArray();
    

    【讨论】:

    • 我收到此错误“对于 List 类型的方法 stream() 未定义”。
    • 仅适用于 Java 8 及更高版本。
    • @AniMenon 是的,这是现代 Java 中的一个。但是请注意,唯一需要 Java 8 的部分是最后两个将List&lt;Integer&gt; 转换为int[] 的语句。如果您不想依赖 Java 8,您可以自己使用 for 循环或使用第三方,如 Apache Commons Lang 的 ArrayUtils
    【解决方案2】:

    有一种简单的读取文件的方法,使用java8时:

    List<Integer> left = new ArrayList(); 
    List<Integer> right = new ArrayList();
    
    Files.lines(Paths.get("c:\\lines.txt"))
        .map(l -> l.split("\\s")) 
        .forEachOrdered(l -> {
            left.add(Integer.parseInt(l[0]));
            right.add(Integer.parseInt(l[1]));
       });
    

    如果你真的需要int[]s,你可以稍后转换:

    int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray();
    int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();
    

    【讨论】:

      【解决方案3】:

      逐行读取文件并按空格分割行,然后将它们添加到数组中。

      BufferedReader br = new BufferedReader(new FileReader(<PATH/TO/FILE>));
      try {
          String line = br.readLine();
          List<Integer> leftColumn = new ArrayList<>();
          List<Integer> rightColumn = new ArrayList<>();
          while (line != null) {
      
              String strarray[] = line.split(" ");
              for (int count = 0; count < strarray.length ; count++) {
                  leftColumn.add(Integer.parseInt(strarray[count]));
                  rightColumn.add(Integer.parseInt(strarray[++count]));
              }
              line = br.readLine();
          }
          System.out.println("Left Column :"+leftColumn);
          System.out.println("Right Column :"+rightColumn);
      }finally {
          br.close();
      }
      

      【讨论】:

      • @slartidan 已删除 sb
      猜你喜欢
      • 2018-02-17
      • 2016-10-29
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多