nur der erste (mehrerer Strings) wird ausgegeben

ernst

Top Contributor
Hallo allerseits,
wenn ich in dem einfachen Programm unten z.B. auf Konsole eingebe:
"Hallo wie geht es euch?"
wird nur hallo ausgegeben.
Der erste white space beendet offensichtlich den Eingabetext.
Die Variable str hat den Wert "hallo".
Ich hätte aber gern, daß str den folgenden Wert hat:
"Hallo wie geht es euch?"
Gibt es eine möglichst einfache Möglichkeit, daß der ganze Text (bis zur Betätigung der ENTER-Taste
in einer Variablen gespeichert wird ?

mfg
Ernst



Java:
import java.util.Scanner;

public class MainTest1 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);        
        String str;
        // Text über Tastatur eingeben
        str=scanner.next();
        System.out.println("str="+str);
    }
}
 
man könnte wohl auch mit readline arbeiten.

Java:
import java.io.*;

class Echo1
{
  public static void main(String[] args) throws IOException
  {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    System.out.print("Gib was ein: ");
    String eingabe = br.readLine();
    System.out.println("Du hast " + eingabe + " eingegeben.");
  }
}

Von der Tastatur einlesen - Java als erste Programmiersprache - Javaschublade
 
Du brauchst natürlich eine Schleife, damit scanner.next()
solange wiederholt wird, bis scanner.nextToken() false ist.
 
@pappawinni: Der Scanner wurde mitunter ins Leben gerufen, um sich diese Konstrukte (mit InputStreamReader und Zeugs) zu ersparen. Aus "readNNN()" wird zwar "nextNNN()" (das gilt auch für Line), aber sonst ist's relativ das gleiche und man hat sogar noch einen Tokenizer gratis.

@Marcinek: ... oder einfach "nextLine()" aufrufen.
 
Zuletzt bearbeitet von einem Moderator:
Gut.. wenn der TO halt eben nur die Zeile lesen will und auf Tokenizer sch...
Jedenfalls muss man nicht jedes Wort einzeln lesen, um das nachher wieder zur Zeile zusammen zu setzen.
Das wär wohl von hinten durch Brust ... denk ich.
 
Er meint (denke ich) so:

Java:
{
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);        
        String str = "";
        // Text über Tastatur eingeben
        String wort;
        
        do {
            wort = scanner.next();
        	str+= " "+wort;
        }
        while (scanner.hasNext());
        
        System.out.println("str="+str);
    }
}

Jedoch muss man die Eingabe mit STRG-Z beenden.

Pentalon
 
Scanner (Java Platform SE 7 )

Bisschen lesen schadet nicht.

--

Ja die Lösung mit nextLine() scheint hier besser angebracht, weil next() am ende der Zeile auf weitere eingabe wartet. Man müsste dann nicht nur hasNext() prüfen, sondern am Ende noch prüfen ob das letzte Token mit \n endet.
 
Zuletzt bearbeitet von einem Moderator:
Bei mir gibt es keine Methode
scanner.nextToken()

mfg
ernst
:lol: Bei mir auch nicht. Das habe ich wohl auch völlig überlesen. "nextToken()" dürfte wohl ein überbleibsel an Angewohnheit sein, welche aus diesen "InputStreamReader und Zeugs"-Konstrukten resultierte. Der "Fauxpas" sei ihm verziehen.
 
Ja die Lösung mit nextLine() scheint hier besser angebracht, weil next() am ende der Zeile auf weitere eingabe wartet. Man müsste dann nicht nur hasNext() prüfen, sondern am Ende noch prüfen ob das letzte Token mit \n endet.
Warum funktioniert dann das folgende Programm nicht?

Java:
package test1;
import java.util.Scanner;
public class MainTest1 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);        
        boolean b=true;
        String str;
        // Text über Tastatur eingeben
        do{
            str=scanner.nextLine();
            System.out.println("str="+str);                        
            // ENTER-Taste wurde gedrückt
            if(str.equals("\n"))
                b=false;
        }while(b);
    }
}
 
Weil es eine Endlosschleife generiert? Und nextLine () ist ein blockierender aufruf ;D

Die Abbruchbedinung ist falsch. \n steht am Ende.

Du hast ZWei Lösungen in einer verpackt 😉

Entweder next() oder readLine(). Ich würde einfach ReadLine () nehmen.
 
Ausserdem: Analog zum "ursprünglichen" "readLine()" wird auch hier dieses ENTER ("\n") verschluckt (also nicht an den String angefügt).
@Marcinek: Macht der Gewohnheit? Wie wär's mit "nextLine()"? 😉
 
hm... was heisst es funktioniert nicht ?
Es tut ja schon was, jedenfalls bei mir.
Du hast nur jetzt zwei Sachen miteinander vermischt.

Anfangs wolltest du nur eine Zeile lesen.
Dafür würdest du aber keine Schleife benötigen, sondern nur eben str=scanner.nextLine();

Jetzt hattest du aber mit str=scanner.next() gearbeitet.
Das geht prinzipiell wohl auch. Ist aber umständlich, wenn es nur darum geht eine Zeile zu lesen,
weil du dann eine Schleife benötigst, um die Worte einzeln zu lesen...

Also das war eigentlich das was du wolltest, wenn ich es richtig verstanden hatte:
Java:
import java.util.Scanner;

public class MainTest1 {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);        
        boolean b=true;
        String str;
        // Text über Tastatur eingeben
        str=scanner.nextLine();
        System.out.println("str="+str);                        
    }
}
 
Zuletzt bearbeitet von einem Moderator:
hm... was heisst es funktioniert nicht ?
Es tut ja schon was, jedenfalls bei mir.
Du hast nur jetzt zwei Sachen miteinander vermischt.

Anfangs wolltest du nur eine Zeile lesen.
Dafür würdest du aber keine Schleife benötigen, sondern nur eben str=scanner.nextLine();

Jetzt hattest du aber mit str=scanner.next() gearbeitet.
Das geht prinzipiell wohl auch. Ist aber umständlich, wenn es nur darum geht eine Zeile zu lesen,
weil du dann eine Schleife benötigst, um die Worte einzeln zu lesen...

Also das war eigentlich das was du wolltest, wenn ich es richtig verstanden hatte:
Java:
import java.util.Scanner;

public class MainTest1 {
 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);        
        boolean b=true;
        String str;
        // Text über Tastatur eingeben
        str=scanner.nextLine();
        System.out.println("str="+str);                        
    }
}

Du hast es auf den Punkt gebracht!!
Ich wollte nur eine Zeile (mit whitespaces) komplett einlesen.
Dank an alle.

mfg
ernst
 

Neue Themen


Zurück
Oben