从文件中解析信息

时间:2017-04-17 00:09:22

标签: java file parsing java.util.scanner

我正在尝试从文件中读取信息,以便使用Java创建图形。我有下面的代码,但是,在运行输出后为null。

该文件提供类似于以下信息

  

3

     

Kentucky Florida Alabama

     

...

     

...

其中3是图中顶点的数量,下一行中的3个位置是那些顶点。我正在努力弄清楚什么导致了空输出。

public class ReadGraph {
  static int vertNum = 0;
  static String[] output;

  public static String[] readVertices(Scanner fileIn) throws FileNotFoundException {
    fileIn = new Scanner(new File("input.txt"));
    vertNum = fileIn.nextInt();
    output = new String[vertNum];
    for (int i = 0; i < vertNum - 1; i++) {
        output[i] = fileIn.next();
    }
    Arrays.sort(output);
    fileIn.close();
    return output;
   }
}

输出应该是此时按字母顺序排列的位置列表。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

fileIn对象读取第一行时,它找到了数字3,这个值正在初始化output数组,在循环中你减去一个{{1}因此,当vertNum - 1尝试排序时,它没有找到完整的数组,只有2个元素,因此它会引发异常。为了避免这种异常,你不应该在循环中减去一个元素,例如:

Arrays

<强>更新 完整的例子:

for (int i = 0; i < vertNum; i++) {
    output[i] = fileIn.next();
}

<强>输出:

public class ReadGraph {
    static int vertNum = 0;
    static String[] output;

    public static void main(String[] args) throws FileNotFoundException {
        Scanner fileIn = null;
        for (String s : readVertices(fileIn)) {
            System.out.println(s);
        }
    }

    public static String[] readVertices(Scanner fileIn) throws FileNotFoundException {
        fileIn = new Scanner(new File("input.txt"));
        vertNum = fileIn.nextInt();
        output = new String[vertNum];
        for (int i = 0; i < vertNum; i++) {
            output[i] = fileIn.next();
        }
        Arrays.sort(output);
        fileIn.close();
        return output;
    }
}