#java #file #java.util.scanner
#java #файл #java.util.scanner
Вопрос:
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 amp;amp; 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
ошибке.
в чем проблема?
Комментарии:
1. Какая строка кода вызывает эту
null
ошибку?2. В настоящее время в вашем коде больше закрывающих фигурных скобок, чем открывающих… пожалуйста, измените его так, чтобы он правильно компилировался, и опубликуйте трассировку стека, отметив любые строки, на которые есть ссылки.
Ответ №1:
Вы должны использовать правильное регулярное выражение в useDelimiter
методе. Следующий код должен работать:
try {
Scanner in = new Scanner(new File("text.txt"));
Formatter out = new Formatter("text1.txt");
in.useDelimiter(",|n|rn|\s ");
int num = in.nextInt();
for(int i = 0; i < num amp;amp; 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]
Комментарии:
1. @mehdi: Я думаю, вы программист и можете модифицировать код таким образом, чтобы он принимал входные данные из файла.
2. Спасибо @Martijn Courteaux 🙂 @mehdi Я отредактировал код, чтобы использовать file вместо System.in и System.out. Но, как сказал Мартин, вы могли бы просто легко заменить его, целью моего кода было показать вам, как использовать правильное регулярное выражение в
useDelimiter
методе.3. этот код выдает это исключение:** Исключение: java.util. Исключение InputMismatchException** в той же строке
4. Есть ли у вас пробелы перед 4 в в вашем text.txt ?
5. Посмотрите мою правку или попробуйте новое регулярное выражение:
in.useDelimiter(",|n|rn|\s ");
Ответ №2:
Проблема в том, что, поскольку вы указываете, что разделителем является запятая, символ новой строки больше не является разделителем.
Измените ваш файл на 4, hello, my, name,is, и он должен работать.
Комментарии:
1. Я понял это, и я объяснял, что произошло, и ничего не упомянул о том, что не читал из файла. Если вы не можете изменить файлы, измените свои анализаторы, чтобы они соответствовали разделителям n и , чтобы они были разделителями.
2. этот код выдает это исключение:** Исключение: java.util. Исключение InputMismatchException** в той же строке
3. извините, моей целью было @anubhava