проблема с использованием разделителя в классе сканера - PullRequest
1 голос
/ 25 мая 2011
    try {
    Scanner in = new Scanner(new File("text.txt"));

    Formatter out = new Formatter("text1.txt");
    in.useDelimiter(",");
    int num = in.nextInt();//this line throws null exception
    for(int i = 0; i < num && in.hasNext(); i++)
    {

        out.format("%s","#string \n" + i );

        out.format("%s", in.next());


    }
    out.close();
    }
     catch (Exception e) {
         System.out.print(e.getMessage());
    }

ввод:

    4
hello,my,name,is

4 - количество слов. выход должен быть:

hello my name is

но это исключение с ошибкой null. в чем проблема?

Ответы [ 2 ]

3 голосов
/ 25 мая 2011

Вы должны использовать правильное регулярное выражение в методе useDelimiter.Следующий код должен работать:

try {
    Scanner in = new Scanner(new File("text.txt"));
    Formatter out = new Formatter("text1.txt");
    in.useDelimiter(",|\n|\r\n|\\s+");
    int num = in.nextInt();
    for(int i = 0; i < num && in.hasNext(); i++)
        out.format("string # %d is: [%s]\n", i, in.next() );
    out.close();
}
catch (Exception e) {
    System.err.print("Exception: " + e);
}

Выход

Для заданного входа

4
hello,my,name,is

выводит:

string # 0 is: [hello]
string # 1 is: [my]
string # 2 is: [name]
string # 3 is: [is]
0 голосов
/ 25 мая 2011

Проблема в том, что если указать, что разделитель - запятая, символ новой строки больше не является разделителем.

Измените свой файл на 4, привет, мой, имя, и это должно работать.

...