2017-01-18 9 views
0

Ich möchte die Benutzereingabe von der Befehlszeile für einen bestimmten Protokolleintrag lesen. Meine Methode eine Zeichenfolge zu lesen:Java-Lesekette mit eckigen Klammern

public static String readString(String message) 
{ 
    System.out.print(message); 
    Scanner scan = new Scanner(System.in); 
    String response = null; 

    while (response == null || response.equals("") || response.length() <= 4) 
    { 
     if(response != null) 
     { 
     System.out.println("Type atleast 5 chars"); 
     System.out.println(message); 
     } 
     response = scan.next(); 
    } 
    return response; 
} 

Also, solange ich tippe nur normale Literale, alles funktioniert gut. Aber die Eingabe so etwas wie:

"[log-123] Beispieltext"

kehrt in Splitting die Antwort.

Warum also dieses Problem auftritt und wie man es vermeidet, so dass alle Zeichen bis zum Zeilenumbruch gelesen werden.

+0

Was ist der Zweck der Übergabe von Nachrichten in der ReadString-Methode? – Ankit

Antwort

3

Scanner. next:

Findet und gibt das nächste vollständige Token von diesem Scanner zurück. Vor einem vollständigen Token folgt eine Eingabe, die mit dem Trennzeichenmuster übereinstimmt.

und

A Scanner bricht seine Eingabe in Token ein Trennzeichen-Muster verwenden, die standardmäßig Leerzeichen einstimmt.

So wird der Eingang [log-123] sample text an den Leerzeichen unterbrochen. Es hat nichts mit den Klammern zu tun.

Dies kann sein, was Sie wollen:

Scanner. nextLine:

Führt den Scanner über die aktuelle Zeile hinaus und gibt die übersprungene Eingabe zurück. Diese Methode gibt den Rest der aktuellen Zeile zurück, mit Ausnahme aller Zeilentrennzeichen am Ende. Die Position wird auf den Anfang der nächsten Zeile gesetzt.

Verwandte Themen