String vergleichen - Leerzeichen Ignorieren?

Marra1996

Mitglied
Hallo Leute.
Ich versuche mich gerade an einem Text-Adventure, und daher soll das Programm Strings vergleichen können.
Ich habe soweit auch den Code fertig:


Java:
playerIn = sc.next();
System.out.println(playerIn); //kommt später weg.
if(playerIn.contains("look")){
System.out.println("You look arround in the Room.");
System.out.println("To your right is a door.");
}else{
System.out.println("What?");
}

Wenn man "look" eingiebt, dann stimmt die Ausgabe auch.
Ausgabe:
look
You look arround in the Room.
To your right is a door.


Allerdings wenn man jetzt "look arround" eingiebt, dann erfolgen zwei Prüfungen.
Ausgabe:
look arround
look
You look arround in the Room.
To your right is a door.
arround
What?


Wie kriege ich es hin das hier die selbe Ausgabe erfolgt, also dass wenn er einmal was erkennt den rest weglässt?
 
Zuletzt bearbeitet:
Hier nochmal die ganze Funktion:

Java:
	boolean roomfinished = false;
		System.out.println("Music of any kind, preferebly classical music, is ");
		System.out.println("recommended while playing.");
		System.out.println("You find yourself in a room.");
		System.out.println("You can look arround...");
		System.out.println("Please write all your commands");
		System.out.println("in lowercase letters.");
		while(roomfinished == false){
			playerIn = sc.next();
			System.out.println(playerIn);
			if(playerIn.contains("look")){
				System.out.println("You look arround in the Room.");
				System.out.println("To your right is a door.");
			}else{
				System.out.println("What?");
			}
		}
	}
 
Strings verlgeicht man mit
Code:
.equals();

wo genau ist jetzt denn das problem ? 🙂

warum nicht sowas in der art:

Java:
package versuche;

import java.util.Scanner;

public class Foo{
	
	Scanner sc;
	
	public Foo(){
		
		sc = new Scanner(System.in);
		String s = sc.nextLine();
		
		switch(s){
		
		case "Tür":
			System.out.println("Oh No , eine Tür ! ");
		break;
		
		case "Dunkel":
			System.out.println("Du bist in einem düsterem Raum");
			break;

                // usw. usw.
		}
		
	}
	public static void main(String[]args){
		
		new Foo();
	}
	
}

andernfalls:

wenn der String nur auf ein wort/Buchstaben/Zahl geprüft werden soll dann
Code:
.contains();

allerdings passiert dann das was du oben schon beschrieben hast, wenn du auf "look" und "arround" getrennt reagieren möchtest, ansonsten musst du halt festlegen welche auswahlmöglichkeiten der spieler hat und ihn dazu bringen auch nur das was erwartet wird einzugeben, oder du musst halt wirklich für jeden eintrettenden fall eine überprüfung schreiben 🙂

ansonsten kannst du auch :

Java:
	if(s.contains("Tür" + " " + "Dunkel")){
			System.out.println("F#@! nun bist du gegen die Tür gerannt ...");
		}

beachte aber das du dich auch um Upper/Lowercase und ggf um Leerzeichen kümmern musst, dies könntest du mit
Code:
.split();
oder auch
Code:
.replaceAll(" " , "");
realiesieren.

und ggf auch
Code:
.trim();
falls ausversehen Leerzeichen vor oder dannach auftreten.

und halt mit
Code:
s.toLowerCase();
 
Zuletzt bearbeitet:
Dein Problem ist ganz einfach. Statt sc.next() solltest du sc.nextLine() verwenden, um das gesamte Kommando zu erhalten. sc.next() liefert beim 1. Durchlauf "look", beim 2. "around", sc.nextLine() liefert hier "look around". Dazugehörig solltest du nicht sc.hasNext() verwenden, sondern sc.hasNextLine().
 

Neue Themen


Zurück
Oben