Check

egokyniker

Mitglied
Hallo,

ich würde gerne einen String checken, ob das erste Zeichen ein "X" ist und das dritte Zeichen ein "." ist.
mString.getName(). ...getfirst()
oder mit .contain()
?
Weiß jemand, wie man das am besten macht?
Vielen Dank
 

KonradN

Super-Moderator
Mitarbeiter
ja, aber ich würde gerne etwas in einer if-Schleife vergleichen:

if (person.getName().charAt(1) ="X") ,so ungefähr, fkt aber nicht
Also es gibt keine if-Schleife. Oder wo siehst Du da eine Schleife?

Und im Code sind mehrere Dinge, die direkt auffallen:
a) Ein Vergleich ist == und eine Zuweisung ein =
b) Du willst ein Char vergleichen mit einem Char. Dann musst Du auch ein Char Literal nehmen. "x" ist ein String Literal. Ein Char Literal ist in einfachen Quotes: 'x'.
 

KonradN

Super-Moderator
Mitarbeiter
Dann drehe es rum.
Sorry, aber Du hast einen primitiven Datentyp! Den vergleicht man mit ==. Da ist es einfach Quatsch so einen Scheiss zu probieren!

Sorry, wenn ich deine Versuche als "Scheiss" abstemple, aber probiere es doch einmal aus!

Oder betrachte es doch einfach einmal:
"X".equals(st.char(0))
Du hast einen String auf dem equals aufgerufen wird. Nun wird da aber ein char herein gegeben was dann in einem Boxing resultiert.
Ist denn nun ein String "X" gleich einem Character 'X'? Was erwartest Du? Wie sieht denn so eine equals Methode standardmäßig aus?

Ok, denk nicht drüber nach - probiere es doch einfach einmal aus ...
 

KonradN

Super-Moderator
Mitarbeiter
X".equals(st.char(0))
Ist für mich umgedreht sagte ich doch
Es ist ja o, wenn Du nicht siehst, dass sowas nicht funktioniert. Du musst auch die Hinweise nicht verstehen, wieso es nicht funktioniert. Aber ausprobieren wirst Du es doch können!

Java:
        String st ="X2.test";
        if("X".equals(st.charAt(0)))
        {
            System.out.println("OK");
        } else {
            System.out.println("Not OK");
        }

Was kommt dabei raus?

Ok, dann wirst Du jetzt als nächstes bestimmt noch:
"X".equals("" + st.charAt(0))
als Alternative haben, oder wie?

Sorry, aber mir fällt dazu nichts ein. Einen char zu vergleichen kann doch nicht so schwer sein. Wie lange machst Du schon Java? Und ist ja nicht so, dass es nicht schon gesagt wurde, wie hier ein Vergleich auszusehen hat.
 

Jw456

Top Contributor
Es ist ja o, wenn Du nicht siehst, dass sowas nicht funktioniert. Du musst auch die Hinweise nicht verstehen, wieso es nicht funktioniert. Aber ausprobieren wirst Du es doch können!

Java:
        String st ="X2.test";
        if("X".equals(st.charAt(0)))
        {
            System.out.println("OK");
        } else {
            System.out.println("Not OK");
        }

Was kommt dabei raus?

Ok, dann wirst Du jetzt als nächstes bestimmt noch:
"X".equals("" + st.charAt(0))
als Alternative haben, oder wie?

Sorry, aber mir fällt dazu nichts ein. Einen char zu vergleichen kann doch nicht so schwer sein. Wie lange machst Du schon Java? Und ist ja nicht so, dass es nicht schon gesagt wurde, wie hier ein Vergleich auszusehen hat.
Ich habe es schon lange begriffen.

Gib liber dem TE deine Aufmerksamkeit.
 

Jw456

Top Contributor
Dann hör doch einfach auf zu diskutieren und an der vermeintlichen Lösung von Dir fest zu halten. Das Thema des TE dürfte mit #6 erledigt gewesen sein. Daher ist hier schon mehr über Müll geschrieben worden als über das Problem des TE.
Wer hält hier fest habe ich ein zweite Mal widersprochen. Wenn man nichts sagt ist es ok.
Anscheinend willst du imner ein jawohl Herr Lehrer hören.

Also bitte sehr jawoll Meister.
Möge die Macht mit dir sein.
 

KonradN

Super-Moderator
Mitarbeiter
Wie sind denn Deine Aussagen zu verstehen?
Dann drehe es rum.
Das war doch ein Hinweis, dass bei Deinem Code etwas umzudrehen sei. Und wie ich dann ausführlich geantwortet habe: das ist Quatsch, das funktioniert nicht!
"X".equals(st.char(0))
Ist für mich umgedreht sagte ich doch
Das warfst mich so zu interpretieren, dass dies in Deinen Augen die valide umgedrehte Lösung sei. Daher noch einmal eine Erläuterung.

Ich habe es schon lange begriffen.

Gib liber dem TE deine Aufmerksamkeit.
Da ist das dann blanker Hohn! Und das
Wer hält hier fest habe ich ein zweite Mal widersprochen. Wenn man nichts sagt ist es ok.
Anscheinend willst du imner ein jawohl Herr Lehrer hören.

Also bitte sehr jawoll Meister.
Möge die Macht mit dir sein.
Erst Recht!

Ich will kein „Jawoll Meister“ oder so. Ich will einfach nicht so oft so Riesen Quatsch lesen. Und dann auf sowas so viel schreiben zu müssen ist nun wirklich vergeudete Zeit.

Wenn man etwas Falsches Schreibt, dann kann man das kurz eingestehen. Dann ist es sofort gut. Aber von Dir ging es ja ständig weiter! Und das nervt extrem!
 

KonradN

Super-Moderator
Mitarbeiter
Sorry, wollte keinen Streit entfachen.
Das liegt ja nicht an Dir. Du kannst absolut nichts dafür, dass da jemand Ideen bringt, die so nicht funktionieren und dann da dennoch dran festhalten will. Wird (hoffentlich) in Kürze auch aus dem Thread verschwinden, denn das hat ja keinen Wert für Leute, die sich für das Problem interessieren.

Mir ist nur wichtig: Du hast verstanden, was ich dir in Kurzform in #6 gesagt habe? Konntest Du es umsetzen, so dass es funktioniert? Denn nur darum geht es. (Und da kannst Du die anderen Ideen ignorieren, denn die führen nun einmal nicht zu einer vernünftigen Lösung!)
 

egokyniker

Mitglied
Java:
     String prefixName = person.getName();
      if (prefixName.startsWith("X")) {

      }

Leider bin ich nicht weiter gekommen. Den Hinweis habe ich nicht ganz verstanden
 

KonradN

Super-Moderator
Mitarbeiter
Die Lösung mit dem startsWith ist auch durchaus ok. Aber wenn man Deine Idee
if (person.getName().charAt(1) ="X")
aufgreift, dann sind da zu beachten:
  • Mit einem = hast Du nur eine Zuweisung, mit zwei == hast Du den Vergleich.
  • "X" ist ein String. Wir wollen aber ein char haben. Das wäre dann ein 'X'. Dies nennt sich Literale und ein String Literal ist immer ein String in doppelten Anführungszeichen. Ein char Literal hat einfache Anführungszeichen mit genau einem Zeichen dazwischen.

Damit wäre der Code dann so in der Form denkbar:
if (person.getName().charAt(1) == 'X')

Was jetzt beim Schreiben noch auffällt: Der Index fängt bei 0 an. Das erste Zeichen ist also an Position 0:
if (person.getName().charAt(0) == 'X')

So lässt sich dann auch das dritte Zeichen prüfen. Da wäre dann das Zeichen mit index 2:
if (person.getName().charAt(0) == '.')

Jetzt bleibt nur noch ein Problem: Wenn der String zu kurz ist, dann bekommen wir eine IndexOutOfBoundsException. Daher sollten wir noch prüfen, ob die Länge größer gleich 3 ist.

Damit haben wir jetzt 3 Bedingungen, die erfüllt sein müssen. Wenn die Länge nicht stimmt, dann sollten die übrigen checks aber nicht mehr ausgeführt werden. Dazu dient das && - das ist ein logisches UND, das nicht weiter macht, sobald es ein false Wert bekommen hat.

Somit kommt man zu einer Prüfung wie:

if (person.getName().length() >= 3 && person.getName().charAt(0) == 'X' && person.getName().charAt(0) == '.')
 

KonradN

Super-Moderator
Mitarbeiter
Und ich sehe gerade - ich habe im Text von Index 2 geschrieben aber versäumt das im Code auch anzupassen. Da muss es dann natürlich charAt(2) heißen und nicht charAt(0) - aber das wirst du bestimmt auch gesehen und angepasst haben.
 

egokyniker

Mitglied
Hallo Leute
ich habe da noch eine Frage: Ich habe nun ein Element, das einen sehr langen Namen hat.
Der Name enthält einen langen Text, der immer mit Routen....... beginnt, und die Länge ist unterschiedlich.
Ich möchte aus diesem String , das was ab Routen.. , einschließlich Routen, löschen.
Es ist leider von Fall zu Fall unterschiedlich , wann der lange Text mit Routen beginnt.
Geht es trotzdem ?

Danke
 

KonradN

Super-Moderator
Mitarbeiter
Dann schau doch einfach, ab wo "Routen" im String vorkommt. Schau dazu einfach einmal die Dokumentation der Klasse String an - ich bin sicher, dass Du da was passendes finden wirst:
 

Ähnliche Java Themen

Neue Themen


Oben