# String mit next()-Methode einlesen - keine Leerzeichen!



## Guest (18. Sep 2006)

Hallo   
Ich bin mal wieder auf eure Hilfe angewiesen ..  :wink: 

Ich möchte in einer Konsolenanwendung einen Text in eine String-Variable einlesen. Dazu bediene ich mich der Klasse Scanner und der Methode next(). 


```
Scanner s = new Scanner(System.in);
    String text = "";

    text = s.next();
```

Leider lassen sich mit der Methode next() keine Leerzeichen einlesen - soll heißen, dass der String bei einem Leerzeichen zu Ende ist.

Aus "Hallo Welt" wird "Hallo".

Weiss jemand, wie sich Text mit Leerzeichen unter Verwendung der Scanner-Klasse einlesen lassen?


Viele Grüße,
Rouven


----------



## The_S (18. Sep 2006)

Ich hab zwar noch nie was mit der Klasse Scanner gemacht, aber die Methode nextLine() schaut doch recht vielversprechend aus.


----------



## SlaterB (18. Sep 2006)

Da stellt sich dann die Frage, wozu überhaupt ein Scanner verwendet wird, wenn doch gar nicht aufgeteilt werden soll.

Ansonsten hilft ein Blick in die API:
s.useDelimiter(xy); stellt das Trennverhalten ein.

Wie man gar nicht trennt kann ich da gerade nicht erkennen,

s.useDelimiter("\n"); dürfte dem nextLine() entsprechen


----------



## babuschka (18. Sep 2006)

> [...] die Methode nextLine() schaut doch recht vielversprechend aus.



Danke für den Tipp!  

Mit..

```
Scanner s = new Scanner(System.in); 
    String text = ""; 

    text = s.next();
    text = s.nextLine();
```

funktioniert es einwandfrei. Wobei Ich noch nicht ganz herausgefunden, was die Methode nextLine() eigentlich en detail macht  ???:L 



> Da stellt sich dann die Frage, wozu überhaupt ein Scanner verwendet wird, wenn doch gar nicht aufgeteilt werden soll.



Nein, aufgeteilt werden soll der String nicht.. jedenfalls nicht hier 
Da ich noch recht neu im Umgang mit Java bin, habe ich einfach mal die Scanner-Klasse zum Einlesen benutzt - erschien mir recht komfortabel.
Welche Klasse bzw. Methode wäre geeigneter, um einen Text mit Leerzeichen in eine String-Variable einzulesen? 

Viele Grüße,
Rouven

PS: Das Einloggen vergisst man hier so leicht ..  :roll:


----------



## LoN_Nemesis (18. Sep 2006)

```
text = s.next();
text = s.nextLine();
```

macht doch keinen Sinn oder? Wenn du immer komplette Zeilen einlesen willst, dann brauchst du nur s.nextLine() und kannst die erste Anweisung text = s.next() löschen.


----------



## Leroy42 (18. Sep 2006)

Rouven hat gesagt.:
			
		

> Wobei Ich noch nicht ganz herausgefunden, was die Methode nextLine() eigentlich en detail macht  ???:L



Wie wär's mit einem Blick in die API?

Die Klasse Scanner zu nutzen ist schon OK


----------



## SlaterB (18. Sep 2006)

BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
String text = "";
text = b.readLine();

aber da ist Scanner wohl wirklich hübscher


----------



## babuschka (18. Sep 2006)

LoN_Nemesis hat gesagt.:
			
		

> ```
> text = s.next();
> text = s.nextLine();
> ```
> ...


Die Zeile "text = s.next();" sollte da nicht stehen  :roll:  .. sorry!


Ich habe noch ein sehr merkwürdiges Problem..
In einer Testklasse funktioniert der Code wunderbar, eingebaut in meinem Programm dagegen nicht. Eine Zeile lässt sich nicht eingeben, es wird einfach übersprungen und die String-Variable bleibt leer..

Kann es damit etwas zu tun haben, dass die Anweisung "text = s.nextLine();" in einem case einer switch-case-Anweisung liegt?
Andere Anhaltspunkte fallen mir nicht auf... :bahnhof:


Viele Grüße,
Rouven


----------



## The_S (18. Sep 2006)

Kommt darauf an wie der switch aussieht  . Poste doch mal den relevanten Code.


----------



## babuschka (18. Sep 2006)

```
import java.util.*;
import java.io.*;

public class Test {
	
	public static void main(String[] args) {
	
		Scanner s = new Scanner(System.in);        // Erzeugung eines Scanner-Objekts
		
		String clear_text = "", secret_text = "";
		char temp_01 = ' ';
		byte value = 0, choice = 0;
		

        // Hier ist ein Auswahlmenü

		choice = s.nextByte();
		
		switch(choice) {
			case 1:

                                   // Case 1... nicht relevant
				break;	
			
			case 2:
				System.out.println("\n\nType clear text (a-z, A-Z): ");
				clear_text = s.nextLine();            // Hier ist die besagte Methode, die nicht funktionieren will.. 
    				
				System.out.println(clear_text);
				break;
			

			case 10: 
				break;
				
			default:
				break;
			}
		}

}
```

Das ist also ein Ausschnitt aus meinem Programm. Ich habe es stark gekürzt.. so wie es hier steht, funktioniert es nicht... warum  ???:L 


Viele Grüße,
Rouven


----------



## SlaterB (18. Sep 2006)

wozu baust du so ein kompliziertes switch ein?
wenn du an dieser Stelle den Fehler siehst, dann probiere doch erst mal 

```
import java.util.*; 
import java.io.*; 

public class Test { 
    
   public static void main(String[] args) { 
    
      Scanner s = new Scanner(System.in);        // Erzeugung eines Scanner-Objekts 
       
      String clear_text = "", secret_text = ""; 
      char temp_01 = ' '; 
      byte value = 0, choice = 0; 
       

        // Hier ist ein Auswahlmenü 

      choice = s.nextByte(); 
       
            System.out.println("\n\nType clear text (a-z, A-Z): "); 
            clear_text = s.nextLine();            // Hier ist die besagte Methode, die nicht funktionieren will.. 
                 
            System.out.println(clear_text); 
      } 

}
```
da tritt der Fehler ja genauso auf..,

das Problem ist, dass noch das Ende der ersten Eingabe gelesen wird, vielleicht das Zeilenumbruchszeichen am Ende..

das sicherste ist, die erste choise auch mit nextLine einzulesen,
ansonsten bisschen probieren (anderer delimiter), generell ein nextLine dazwischenschieben/ ..?


----------



## babuschka (18. Sep 2006)

@SlaterB
Vielen Dank für die Hilfe!   

Ich hatte ganz übersehen, dass ich den Wert für die choice-Variable auch mit dem Scanner-Objekt einlese.. das kommt sich also in die Quere..  :? 


```
choice = s.nextByte();
		String temp = s.nextLine();        // fängt den Zeilenumbruch ab
		
		System.out.println(choice);		

			
		System.out.println("\n\nType clear text (a-z, A-Z): ");
		clear_text = s.nextLine();
```

Ich habe, wie du vorgeschlagen hast, eine zusätzliche nextLine() Anweisung dazwischengeschoben. Sieht nicht besonders elegant aus, funktioniert aber!   


Viele Grüße,
Rouven


----------

