2015-11-26 5 views
2

Я пытаюсь понять класс сканера в java, из некоторых примеров пытаюсь, что я двусмысленен с двумя программами, где я не вижу никакой логики, но вывод говорит о том, что чего-то мне не хватает. Пожалуйста, помогите мне в этомПонимание Сканера в Java

public static void main(String args[]) { 
     Scanner scanner1=new Scanner(System.in); 
     String s=scanner1.nextLine(); 
     scanner1.close(); 

     // create a new scanner with the specified String Object 
     Scanner scanner = new Scanner(s); 

     // print the next line 
     System.out.println("" + scanner.nextLine()); 

     // check if there is a next line again 
     System.out.println("" + scanner.hasNextLine()); 

     // print the next line 
     System.out.println("" + scanner.nextLine()); 

     // check if there is a next line again 
     System.out.println("" + scanner.hasNextLine()); 

     // close the scanner 
     scanner.close(); 
     } 

выше программы печати ниже выхода

Hello World! \n 3+3.0=6 
Hello World! \n 3+3.0=6 
false 

Хотя ниже программа, которая я не видит никакой разницы с выше показывают различные выходные

public static void main(String[] args) { 

     String s="Hello World! \n 3 + 3.0 = 6"; 
     // create a new scanner with the specified String Object 
     Scanner scanner = new Scanner(s); 

     // print the next line 
     System.out.println("" + scanner.nextLine()); 

     // check if there is a next line again 
     System.out.println("" + scanner.hasNextLine()); 

     // print the next line 
     System.out.println("" + scanner.nextLine()); 

     // check if there is a next line again 
     System.out.println("" + scanner.hasNextLine()); 

     // close the scanner 
     scanner.close(); 
     } 

выхода вышеуказанной программы является

Hello World! 
true 
3 + 3.0 = 6 
false 
+0

В первом примере вы используете 'scanner1', только тогда' scanner'. Это опечатка? – Maroun

+0

В первом примере я использую два объекта сканера, один из них - сканер 1, чтобы сохранить входную строку с клавиатуры, а затем разобрать ее со сканером. Во втором примере я непосредственно жестко кодирую входную строку в программе, в отличие от предоставления ее во время выполнения (как в первом примере) –

ответ

0

Я предполагаю, что в первом фрагменте вы вводите Hello World! \n 3+3.0=6 на стандартный ввод. «\ n» не анализируется как новая строка в этом случае (он анализируется как символ «\», за которым следует символ «n»). Вы должны на самом деле нажать кнопку ввода после ввода «Hello World!», Чтобы сканер разделил вход на две строки.

С другой стороны, когда сканер принимает входные данные из строки, «\ n» рассматривается как новый символ строки.

О, и похоже, у вас есть опечатка в вашем первом фрагменте. Я предполагал, что вы используете сканер, который принимает его от System.in (вероятно, вы перепутали код двух фрагментов).

2

Если \ п записываются в файле, который вы не можете использовать nextLine() [с двумя обратными косыми чертами, это даст вам java.util.NoSuchElementException], потому что нет \ п (конец строки), но вместо того, чтобы там это \ n (два обратных слэша). Чтобы прочитать файл и заменить \ n в тексте фактическим EOL, вы можете использовать sc.useDelimiter ("\\ n") для новой строки, но тогда это может нарушить функциональность некоторого метода сканера.

Scanner s = new Scanner("Hello World! \\n 3 + 3.0 = 6"); 
s.useDelimiter("\\\\n"); 
System.out.println(s.next()); 
System.out.println(s.next()); 

даст вам выход как

Hello World! 
3 + 3.0 = 6 
Смежные вопросы