• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java / String / Terminal / --> Wut

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
Aloha,

ich wollte kurz ein Java Programm schreiben. UNd es lief auch gut (dafür das ich länger als ein Jahr kein Java gemacht habe :-D), aber ich hab ein kleines Problem und vllt könnt ihr mir helfen.

Also ... mal vorweg ... ich benutze kein Eclipse oder so sondern einen sticknormalen Texteditor
und benutze den Terminal zum compilen etc.

Mein Problem ist die Stringeinlesung/vergleich (hey ... es ist mehr als ein Jahr her ... siehe oben :p)
Jedenfalls funktioniert alles super bis auf die kitzkleine Kleinikeit, dass ich einen String immer nur mit Anführungsstrichen
"xyz"
eingeben muß, und nicht
xyz
ohne eingeben kann.

Kann mir jmd helfen?


p.s.: für den vergleich benutze ich k.equals(z)...also so ein Befehl falls es euch weiterhilft :)
 

dubb3000

Braeburn
Registriert
09.01.06
Beiträge
47
Hi

Ich weiss nicht genau ob meine Antwort dir helfen kann aber ich versuchs mal.
Wie liest du den String ein? Übergibst du den String beim Start des Programms als Parameter? Wie deklarierst du die Variable der dein String übergeben wird?
So: String xyz; ? Oder String xyz = null; ?
Vielleicht hilft es die Variable so zu deklarieren
String xyz = "";
und dan kannst du xyz den String den du als Parameter zum Vergleichen übergeben willst ohne Anführungszeichen schreiben.
Alles ohne Gewähr. Bei mir ist es auch ein wenig her mit Java.
Grüße
 
  • Like
Reaktionen: messia04

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Könntest Du bitte mal konkreter sagen was Du überhaupt meinst?
 

Mitglied 7974

Gast
Probier's damit:

Code:
import java.util.*;

public class Input {
  public static void main(String[] args) {
		
    // Für einfaches Lesen
    Scanner in = new Scanner(System.in);
    System.out.print("Bitte gib irgendwas ein: ");
    String eingabe = in.nextLine().trim();
    System.out.println(eingabe);
		
    // Für mehrfaches Lesen
    Scanner input = new Scanner(System.in);
    String endString = "ende";
    String eingabeString = "";
    while (!eingabeString.equals(endString)) {
      System.out.print("Bitte 'ende' eingeben: ");
      eingabeString = input.nextLine().trim();
    }
    System.out.println("Und schon sind wir glücklich.");
  }
}
 
  • Like
Reaktionen: messia04

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Beziehst Du dich auf diese Zeilen?

Code:
String eingabeString = "";
    while (!eingabeString.equals(endString)) {

Also ist dein Problem, dass du eingabeString mit "" initialisieren muss?

Wenn dem so ist:

Sowohl
String eingabeString;
als auch
String eingabeString=null;

würden eingabeString mit null... initalisieren. Also quasi mit "nix"..... oder um des deutlicher zusagen... der Verweis auf den Speicherbereich für eingabeString liegt im "SpeicherNirvana".. aka NullPointer

Du willst aber nun etwas vergleichen und dazu benötigst Du ja etwas handfestes.. darum initialisierst Du mit "" und belegst nun Speicher.

Ich hoffe nur, dass ich deine Gedanken richtig lesen konnte.. wenn das oben nicht das ist was Du wissen wolltest, schreib es hier doch mal bitte deutlich rein... ;)
 
  • Like
Reaktionen: messia04

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
Erstmal vorweg, danke für eure Antworten, werde sie sogleich ich zuhause bin ausprobieren, aber bis dahin folgende nähere Beschreibung des Problems.

Der String wird eingelesen. Der Benutzer tippt es im Terminal ein und wird in Java als Variable y gespeichert.
Nun vergleiche ich es mit einem bestimmten String. Z.b. mit "Hallo". Der Befehl ist
if (y.equals("Hallo")) {...} else {...}

Wenn jezt die Eingabe im Terminal Hallo ist, springt er in den else-Zweig.
Wenn aber die Eingabe im Terminal "Hallo" ist, macht er den then-Zweig.

Der Benutzer soll aber nicht diese " " setzen müssen, sondern das Prog soll auch Hallo akzeptieren und damit den then-Zweig ausführen.

Das ist das Problem.
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Nun vergleiche ich es mit einem bestimmten String. Z.b. mit "Hallo". Der Befehl ist
if (y.equals("Hallo")) {...} else {...}

Wenn jezt die Eingabe im Terminal Hallo ist, springt er in den else-Zweig.
Wenn aber die Eingabe im Terminal "Hallo" ist, macht er den then-Zweig.

Meinst Du:
Wenn jezt die Eingabe im Terminal Hallo ist, springt er in den if-Zweig.
Wenn aber die Eingabe im Terminal "Hallo" ist, macht er den else-Zweig.
???

in PseudoCode:

Code:
if(y.equals("Hallo") {
  //User hat Hallo eingegeben
} else {
  //User hat "Hallo" eingegeben
}


Wenn Du das meinst, dann folgende Erklärung dazu.

Wenn Du innerhalb vom Java-Code eine Zeichenkette in Anführungszeichen setzt, dann interpretiert der JavaCompiler das, was innerhalb der Gänsefüsschen steht als StringObjekt. WICHTIG.. nur das was INNERHALB der Gänsefüsschen steht!

Wenn Du willst, dass "Hallo" (einschliesslich Gänsefüsschen) erkannt wird, dann muss der Vergleich so aussehen:

Code:
if(y.equals("\"Hallo\"")

das \" sagt dem Kompiler, dass da auch Gänsefüsschen beachet werden sollen.. und damit er das von "normalen" unterscheiden kann wird ein Backslash (\) als Escape-Sequenz benutzt.
 

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
hier mal ein kleines Programm, mit dem gleichen Problem:

Code:
class Test {


    public static void main(String[] args){
        
        String y="";
        Out.println("Tipp y ein:");
        y=In.readString();

        if(y.equals("Hallo")) Out.println("geklappt");
        else Out.println("schade");
    }
}

Hinweis: ich benutze die In/Out Klassen von "Sprechen Sie Java?" also die In und Out Befehle stimmen


Und wenn ich hier jetzt im Terminal Hallo eingebe
gibt er mir "schade" aus, obwohl er "geklappt" ausgeben sollte (mein Wunsch)

Er gibt aber nur "geklappt" aus, wenn ich im Terminal "Hallo" eingebe
 

Trapper

Meraner
Registriert
12.05.05
Beiträge
231
Hinweis: ich benutze die In/Out Klassen von "Sprechen Sie Java?" also die In und Out Befehle stimmen

Sicher? Was gibt er denn aus, wenn du nach y=In.readString(); ein
System.out.println(y); machst?

Edit: Ok, hab's schon. Hab mir diese IO-Klassen angesehen - nimm doch einfach statt readString() ("Read a quote-delimited string." -- aus dem Methodenkommentar) ein readLine().
 

messia04

Prinzenapfel
Registriert
30.06.04
Beiträge
544
also wenn ich "Hallo" eingebe gibt er mir Hallo aus
und wenn ich Hallo eingebe gibt er mir eine leere Zeile ( ) aus.
OKAY ... hat sich geklärt ...

ich mußte den String mit dem Befehl In.readLine(); auslesen und nicht In.readString();

DANKE AN ALLE DIE GEHOLFEN HABEN!!!
 

MacMark

Jakob Lebel
Registriert
01.01.05
Beiträge
4.874
Mach es mal so ;)

Code:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class hallo {

	public static void main(String[] args) {
		BufferedReader console = new BufferedReader(new InputStreamReader(
				System.in));
		String input = null;
		System.out.print("Eingabe: ");
		try {
			input = console.readLine();
		}
		catch (IOException iox) {
			// nothing
		}

		if (input.equals("Hallo")) {
			System.out.println("gleich");
		}
		else {
			System.out.println("ungleich");
		}

	}
}