Substring Problem (lustig) !

ciubic

Mitglied
Hallo Leute!

Ich habe ein lustiges Problem!

Entweder bin ich total bescheuert oder es geht echt nicht ^^.


Also ich bekomme eine String über eine Socketverbindung danach wird der String an eine Funktion übergeben.
Die Funktion soll nun überprüfen ob die erste 2 Zeichen „ok“ entsprächen wenn ja soll der Rückgabewert True sein ansonsten False. Die restlichen Zeichen des Strings werden in eine Globale Variable übergeben.



Code:
    public boolean check_account(String got)
      {
          /*
                  0_1_2_3_4_5
                  |o|k|j|u|l|
                  0_1_2_3_4_5
           */
          System.out.println(got);
          
          //got = "okJulian Nischler";
          String status = got.substring(0,2);
          String name = got.substring(2);
          System.out.println(status);
          System.out.println(name);
          System.out.println(status);
          System.out.println("" + status.length());
          if(status == "ok")
          {
              this.benutzer_name = name;
              System.out.println("ok");
              
              return true;   
          }else{
              System.out.println("falsch");
              return false;
          }
      }




Wenn ich nun "okJulian Nischler" übergebe sollte der Rückgabewert True seiner ist aber False.

Die ganzen System.out..... ergeben:



Code:
okJulian Nischler
  Julian Nischler
  ok
  2
  falsch




Also ich finde das komisch

lg
Julian Nischler
 
Nö, in c/c++ und visual basic werden strings meines wissens auch mit ensprechenden Methoden verglichen. C# bietet glaub ich auch eine entsprechende Methode an, aber der Vergleich geht wohl auch über "==".

Merkt dir einfach mit "==" vergleichst du ob die Referenz, also ob das Objekt gleich ist, bei Strings vergleicht die equals() Methode deren Inhalt.
Es gibt zwar Sonderfälle, in denen der Stringvergleich auch mit "==" funktioniert, aber dazu schaust du besser mal hier im Forum nach.. Gab mal nen recht Großen Thread dazu...

*grüssle*
MeinerEiner
 
Als Ergänzung möchte ich hinzufügen:
- in c/c++ gibt es dafür strcmp(string1,string2) oder so ungefähr
- wie mein Vorredner schon richtig sagte wird die Referenz überprüft...oder vielmehr die Adresse.
- in dem Fall könntest du auch die String Methode startsWith(String) benutzen oder wenn das "ok" auch mal groß geschrieben sein kann ein equalsIgnoreCase(String) oder du bringst halt selbst mit toUpperCase oder toLowerCase zur gewünschten Groß-/-Kleinschreibung.

Java:
          System.out.println("" + status.length());
Nur ein kurzer Hinweis dazu:
das ""+ am Ende ist vollkommen unnötig.

Du brauchst nicht für jeden Zeilenumbruch ein neues System.out.println. Du kannst auch einfach ein +"\n"+ (newline) einbauen, dort wo ein Zeilenumbruch hinkommt. Hier ist es so wie du es hast noch am besten zu lesen(da du kaum Text hast,sondern mehr Variablen), aber wenn du einen längeren Text hast würde ich "\n" benutzen.
 
Zurück