Запрещено исключение в выходных данных, но выполняется то, что я хочу - PullRequest
0 голосов
/ 18 марта 2012

Мой код такой:

public static void main(String args[]) throws IOException
{
    String name;
    int population;
    String[] tokens;
    FileReader fin = new FileReader("Test.txt");

    Scanner src = new Scanner(fin);

    src.useDelimiter(",");

    while (src.hasNextLine())
    {
        if (src.hasNext())
        {
            tokens = src.nextLine().split(",\\s");
            name = tokens[0];
            population = Integer.parseInt(tokens[1].trim());
            System.out.printf("Name:%-15s  %-15d\n", name, population);
        } else
        {
            String str = src.next();
            if (str.equals(""))
            {
                break;
            } else
            {
                System.out.println("File format error.");
                return;
            }
        }
    }
    System.out.println("end");
    fin.close();
}

В моем тестовом файле у меня просто есть имя состояния, за которым следуют запятая, пробел, совокупность и, возможно, случайный пробел после совокупности.Мои результаты выводятся как

..... Имя: Вирджиния 7100702
Имя: Вашингтон 5908684
Имя: Западная Вирджиния 1813077
Имя: Висконсин 5371210
Имя: Вайоминг495304
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1 at javatesters.JavaTesters.main (JavaTesters.java:35) Результат Java: 1 BUILD SUCCESSFUL (общее время: 0 секунд)

Конец моего тестового файла

Вирджиния 7100702
Вашингтон 5908684
Западная Вирджиния 1813077
Висконсин 5371210
Вайоминг 495304

Общая численность населения281424177 435

И я хочу, чтобы в пустой строке указывался конец файла

1 Ответ

0 голосов
/ 18 марта 2012

Когда ваш сканер переходит к строке, которая не содержит ",", этот вызов split(",\\s") разбивает его на одну строку.Итак, когда вы получаете доступ к tokens[1], вы выходите за пределы массива.Есть много способов обойти это.Один из подходов (хотя и не самый чистый) заключается в проверке, чтобы убедиться, что tokens имеет два элемента, прежде чем использовать его.

...