如何使用Scanner将文本文件分解为两个部分

时间:2013-07-21 11:16:50

标签: java

输入(以空格分隔):

1 1 2 3
2 1 7
3 3 7
4 1 5
5 3 6

我想将这些输入处理为:

对于文本文件::(first_element,例如1)中的每一行,将一个int变量(例如,m)和下面的(next_elements,例如1 2 3)放入一个ArrayList(比如说N)

我尝试了以下内容:

Scanner file_scanner = new Scanner(filename);
  while (file_scanner.hasNextLine()) {              
     String[] line = file_scanner.nextLine().split("\\s+");
     String str1 = line[0];
     String str2 = line[1];

     m = Integer.parseInt(str1);

     Scanner line_scanner = new Scanner(str2);
     while(line_scanner.hasNext()) {
        int n = line_scanner.nextInt();
        N.add(n);
     }
  }

但是我无法像我想的那样解析输入。关于如何使用Scanner处理输入线的两个部分的任何建议?或者,甚至如何检查当前行的结尾(EOL)以及如何更容易地解析第一个元素?

2 个答案:

答案 0 :(得分:1)

在您的代码中尝试此String[] line = file_scanner.nextLine().split("\\s+",2);。它会将每一行分成2个令牌。

编辑:第[1]行将包含其余数字,您无需再次解析它。

答案 1 :(得分:0)

对不起它可能不是最有效的,因为它是凌晨4:39:

    Scanner s = new Scanner(file);
    int m  = 0;
    List<Integer> list = null;

    while(s.hasNextLine())
    {
        Scanner s2 = new Scanner(s.nextLine());
        int count = 0;

        list = new ArrayList<Integer>();
        while (s2.hasNextInt())
        {

            if(count == 0)
            {
                m = s2.nextInt();
            }
            else
            {
                list.add(s2.nextInt());
            }
            count++;
        }
        System.out.println(m + " " + list);
    }