0

输入(空格分隔):

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

我想像这样处理这些输入:

对于文本文件中的每一行:: (first_element, eg 1) into an int variable (say, m) and following (next_elements, eg 1 2 3) into an ArrayList (say, 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);
     }
  }

但我无法按预期解析输入。关于如何使用扫描仪处理输入行的两个部分的任何建议?或者,甚至如何检查当前行的结尾(EOL)以及如何更轻松地解析第一个元素?

4

2 回答 2

1

String[] line = file_scanner.nextLine().split("\\s+",2);在你的代码中试试这个。它将每行仅拆分为 2 个标记。

编辑: line[1] 将包含其余的数字,您不需要再次解析它。

于 2013-07-21T11:21:15.250 回答
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);
    }
于 2013-07-21T11:38:48.477 回答