2015-11-24 25 views
5

Robię ćwiczenie od wstępu do programowania obiektowego z Java C. Thomas Wu.Wykorzystanie ogranicznika, dlaczego skaner nie zwraca?

Strona 73 zawiera kod żądania pełnej nazwy, tokenizacji za pomocą ogranicznika i wydrukowania go.

import java.util.*; 

class Scanner1 
{ 
    public static void main(String[] args) 
    { 
     String name; 
     Scanner scanner = new Scanner(System.in); 

     scanner.useDelimiter(System.getProperty("line.separator")); 
     System.out.print("Enter full name (first, middle, last)"); 

     name = scanner.next(); 
     System.out.println("you entered " + name + "."); 
    } 
} 

Problem jest kopalnia robi wydają się chce wydrukować go z powrotem, i zamarza program, wymuszając stosowanie menedżera zadań, aby go zamknąć.

Running Program

To kompiluje i nie przedstawia żadnych błędów. Byłem nad nim kilka razy, aby sprawdzić błędy ortograficzne itp

IDE with Delimiter Code

Jeśli usunąć sekcję ogranicznika (ostatni pic) to działa jeden pierwszy znak do pierwszego miejsca. Zatem błąd leży gdzieś w kodzie ogranicznika.

IDE without Delimiter Code

+8

kod, który wysłałeś, działa dobrze dla mnie! czy na pewno naciskasz "ENTER" po wprowadzeniu? – ParkerHalo

+0

sprawdź okno wyjściowe .. –

+5

Wydaje się być problem z używanym IDE. Prawdopodobnie różnica w separatorach liniowych – 6ton

Odpowiedz

5

Wydaje się konsola IDE nie rozważa [Enter] separator linii. Najlepszym sposobem na sprawdzenie, czy twój kod działa, jest wywołanie skompilowanego pliku Java bezpośrednio z terminala (konsola w systemie Windows). Oczywiście najpierw musisz przejść do katalogu, w którym skompilowany plik Java będzie się powtarzał (gdzie znajduje się plik Scanner1.class).

E.g. java Scanner1

Jeśli chcesz być niezależny system, najlepszym sposobem na to jest do opracowania wzorca, w którym można zdefiniować separator lub po prostu skorzystać z wbudowanego w metodzie .nextLine() reference to Oracle docs

public class Main { 
    //These constant fields are from .nextLine() method in the Scanner class 
    private static final String LINE_SEPARATOR_PATTERN ="\r\n|[\n\r\u2028\u2029\u0085]"; 

    public static void main(String[] args){ 
     Scanner scanner = new Scanner(System.in); 
     scanner.useDelimiter(Pattern.compile(LINE_SEPARATOR_PATTERN)); 
     System.out.print("Enter name:"); 
     String name = scanner.next(); 
     System.out.println(name); 
    } 
} 
+0

Czy wypróbowałeś swój kod? –

+1

Dziękuję za komentarz, teraz powinien działać. Nie wiem, dlaczego użyłem złego stałego pola. –