1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java / String / Terminal / --> Wut

Dieses Thema im Forum "PHP & Co." wurde erstellt von messia04, 12.03.07.

  1. messia04

    messia04 Prinzenapfel

    Dabei seit:
    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 :)
     
  2. dubb3000

    dubb3000 Braeburn

    Dabei seit:
    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
     
    messia04 gefällt das.
  3. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    Könntest Du bitte mal konkreter sagen was Du überhaupt meinst?
     
  4. snoopysalive

    snoopysalive Allington Pepping

    Dabei seit:
    19.08.05
    Beiträge:
    195
    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.");
      }
    }
    
     
    messia04 gefällt das.
  5. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    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... ;)
     
    messia04 gefällt das.
  6. messia04

    messia04 Prinzenapfel

    Dabei seit:
    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.
     
  7. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Du solltest eher diesen Abschnitt deines Programms zeigen, denn dein später genannter Vergleich (mittels equals("Hallo")) ist schon korrekt.
     
  8. MatzeLoCal

    MatzeLoCal Rheinischer Bohnapfel

    Dabei seit:
    05.01.04
    Beiträge:
    2.421
    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.
     
  9. messia04

    messia04 Prinzenapfel

    Dabei seit:
    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
     
  10. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    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().
     
  11. messia04

    messia04 Prinzenapfel

    Dabei seit:
    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.
     
  12. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Lies bitte das Edit meines vorhergehenden Postings. Klappt's damit?
     
    messia04 gefällt das.
  13. messia04

    messia04 Prinzenapfel

    Dabei seit:
    30.06.04
    Beiträge:
    544
    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!!!
     
  14. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    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");
    		}
    
    	}
    }
    
     

Diese Seite empfehlen