[java] Scanner met spaties?

Status
Niet open voor verdere reacties.

timboiscool

Gebruiker
Lid geworden
27 nov 2008
Berichten
205
Hallo lezers!

ik ben nu al een paar dagen bezig om een oplossing to vinden naar het volgende probleem:

Ik heb een scanner nodig die ook spaties mee telt
want als ik dit doe:

Code:
import java.util.Scanner;

public class Kiwi{

public static void main(String args[]){

String Sstring;
Scanner scn = new Scanner(System.in);

Sstring = scn.next();
System.out.println("je hebt dit getypt: " + Sstring);

}

}

als ik dus bijvoorbeeld:

Hoi ik ben 12 jaar!

typ dan komt er alleen te staan:

hoi

Hoe los ik dit op?

ps: ik had zelf gedacht aan nextLine maar ik weet niet wat nextLine doet xD
 
Als je naar de scanner klasse zoekt kom je op de api uit: http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

Zoals je daar bij de methode nextLine() ziet staan gaat de scanner over de betreffende regel naar de volgende regel en geeft als uitvoer de regel die hij heeft gezien. (waar hij langs is geweest). Makkelijk gezegd bekijkt hij dus de regel die je hebt ingetikt en zet zijn cursor (kijkpunt) op de volgende regel.

dus als je
Code:
Sstring = scn.next();

vervangt door:
Code:
Sstring = scn.nextLine();

Krijg je de verwachte uitvoer.

Met vriendelijke groet,
NewbiProgrammer
 
Als je naar de scanner klasse zoekt kom je op de api uit: http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html

Zoals je daar bij de methode nextLine() ziet staan gaat de scanner over de betreffende regel naar de volgende regel en geeft als uitvoer de regel die hij heeft gezien. (waar hij langs is geweest). Makkelijk gezegd bekijkt hij dus de regel die je hebt ingetikt en zet zijn cursor (kijkpunt) op de volgende regel.

dus als je
Code:
Sstring = scn.next();

vervangt door:
Code:
Sstring = scn.nextLine();

Krijg je de verwachte uitvoer.

Met vriendelijke groet,
NewbiProgrammer


Bedankt NewbiPRogrammer :D

maar dat was een voorbeeld dat werkt maar dit niet(sorry dat het best wel groot is.):
Code:
import java.util.Scanner;

public class Datas {
	public static void main(String args[]){
		String Strs[] = new String[101];
		Scanner scn = new Scanner(System.in);
		String  GoS;
		String goon = "no";
		int nmb;
		do{
			System.out.println("Get or Set?:");
			GoS = scn.nextLine();
			if(GoS.equalsIgnoreCase("get")){
				System.out.println("Which number 1/100?");
				nmb = scn.nextInt();
				
				System.out.println("You chosen number: " + nmb + ".\nThat contains the string: "+Strs[nmb] );
			}else if(GoS.equalsIgnoreCase("Set")){
				
				System.out.println("Which number do u want to change? 1/100: ");
				nmb = scn.nextInt();
				if(Strs[nmb] == null){
					System.out.println("Number " + nmb + " does not contain anything yet.");
					System.out.println("Change it to: ");
					Strs[nmb] = scn.nextLine();
					System.out.println("\nU have succesfully change " + nmb + " to " + Strs[nmb]);
				}else if(Strs[nmb] != null){
					System.out.println("Number " + nmb + " contains the string: " + Strs[nmb]);
					System.out.println("Change it to: ");
					Strs[nmb] = scn.nextLine();
					System.out.println("Number " + nmb + " is now succesfully changed to: \n\n");
				}
			}
			
			System.out.println("\nWanna quit?\n");
			goon = scn.nextLine();
			
	}while(goon.equalsIgnoreCase("no"));
	}
}
 
Ik heb het even voor je getest en het probleem zit hem denk ik in het feit dat de methode nextInt() alleen een int leest, niet het einde van de regel.

De nextLine zoekt een regel af naar een "line seperator" het einde van een regel dus

Uit de api van de scanner:
his method continues to search through the input looking for a line separator

Als je na een nextInt() een nextLine() doet die de "huidige" lijn bekijkt tot aan het einde van de regel pakt hij dus de regel waar jij net de int hebt ingevoerd, omdat de scanner (door de nextInt) nog geen einde regel symbooltje heeft gezien.

Een klein voorbeeldje om dit te verwerken.

Stel je vult in het programma een 4 in.
Daarna doe je een nextLine(). Dan kijkt het programma naar de huidige regel en dat is voor hem het kleine gedeelte na de 4 dat dus "" (leeg) is want na die regel staat een einde regel symbool. Dat lege gedeelte returned hij dan.

Hoe je het zo makkelijk mogelijk op zou kunnen lossen (in de if als de set is ingevuld) is dus een nextInt() na een nextInt() doen, wat in dit geval ook kan volgens mij.
Op het einde zou je nog een nextLine voor de laatste nextLine kunnen zetten, dit zal het oplossen. Ik zal nog even denken over een beter oplossing. Nu eerst eten:)

p.s. ik heb wel grotere stukken code gezien hoor ;)
met vriendelijke groet,
NewbiProgrammer
 
Laatst bewerkt:
Ik heb het even voor je getest en het probleem zit hem denk ik in het feit dat de methode nextInt() alleen een int leest, niet het einde van de regel.

De nextLine zoekt een regel af naar een "line seperator" het einde van een regel dus



Als je na een nextInt() een nextLine() doet die de "huidige" lijn bekijkt tot aan het einde van de regel pakt hij dus de regel waar jij net de int hebt ingevoerd, omdat de scanner (door de nextInt) nog geen einde regel symbooltje heeft gezien.

Een klein voorbeeldje om dit te verwerken.

Stel je vult in het programma een 4 in.
Daarna doe je een nextLine(). Dan kijkt het programma naar de huidige regel en dat is voor hem het kleine gedeelte na de 4 dat dus "" (leeg) is want na die regel staat een einde regel symbool. Dat lege gedeelte returned hij dan.

Hoe je het zo makkelijk mogelijk op zou kunnen lossen (in de if als de set is ingevuld) is dus een nextInt() na een nextInt() doen, wat in dit geval ook kan volgens mij.
Op het einde zou je nog een nextLine voor de laatste nextLine kunnen zetten, dit zal het oplossen. Ik zal nog even denken over een beter oplossing. Nu eerst eten:)

p.s. ik heb wel grotere stukken code gezien hoor ;)
met vriendelijke groet,
NewbiProgrammer

dus het scannen had eigenlijk gewoon een einde nodig?
gaaf :D
bedankt.
groeten, Tim!
 
Inderdaad! Zou je de vraag misschien als opgelost willen markeren, indien je geen vragen meer hebt natuurlijk;)?

met vriendelijke groet,
Bram (NewbiProgrammer)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan