2017-01-25 13 views
1

Я использую класс Scanner как stdin для чтения ввода из keybord. Я бы прочитал токен, указав вставку строки до конца строки. Значок разделены пробелами.Java: Чтение токена с помощью токена входной строки

это мой код:

Scanner in = new Scanner(System.in); 

    int count=0; 
    while(in.hasNextLine()){ 
     while(in.hasNext()){ 
      String s=in.next(); 
      System.out.println(s); 
      if(s.equals("\n")) 
      break; 
      count++; 
     } 
     break; 
    } 
    System.out.println(count); 

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

единственный способ выйти из некоторого времени и завершить программу в Linux, это нажать Ctrl + D (= ввод), но я ищу другой путь ...

Я попытался вставить if, который проверяет, является ли токен «\ n», но он не работает.

Вы можете помочь мне найти решение проблемы.

+0

Какова цель программы? –

+0

Извините, программа должна подсчитать, сколько слов есть в строке. Я знаю, что могу сделать это другими способами, как разделение строки, поместить в массив и взять длину массива, но я пытаюсь понять метод .hasNext() ... – Jay

ответ

2

Методы in.hasNextLine() и in.hasNext() блокируют при использовании с потоками: если нет новой строки или нового токена, они будут ждать, пока вы что-то не напишете, и нажмите клавишу ввода еще раз.

Если вы хотите только одну строку, вы можете использовать что-то вроде:

package test; 

import java.util.Scanner; 

public class Test { 

    public static void main(String[] args) { 
     int count=0; 
     Scanner in =new Scanner(System.console().readLine()); //scanning just one line 
     while(in.hasNext()){ 
      String s=in.next(); 
      System.out.println(s); 
      count++; 
     } 
     System.out.println(count); 
     in.close(); 
    } 

} 

Примечание: Если выполнить этот код из IDE, нет консоли, так System.Console() возвращает нуль. Чтобы запустить его из командной строки, вам нужно ввести что-то вроде:

$ pwd 
/home/user/development/workspace/test/bin 
$ ls 
test 
$ ls test 
Test.class 
$ java -classpath /home/user/development/workspace/test/bin/ test.Test 
+0

это дает мне это исключение: Исключение из thread "main" java.lang.NullPointerException – Jay

+0

Я предполагаю, что вы выполняете его из среды IDE, проверьте мое обновление –