Strings und reguläre Ausdrücke - Methode mit return string.matches

schredder

Mitglied
Ich habe die Folgende Aufgabe zu lösen und komme leider mit meinem Ansatz für die Überprüfung von richtigen Ergebnissen (true) ein (false) ausgeben. Ich habe jetzt schon einige Schreibweisen ausprobiert und verstehe nicht ganz wieso mein Ansatz nicht die Anforderungen erfüllt. Über Hinweise wäre ich dankbar!

1638297125845.png

Java:
private boolean istPasswortGueltig(String passwort)
{
    return Pattern.matches("([A-Z][a-z][a-z][a-z][^0-9][0-9][^0-9][^0-9]){8}", passwort);

Ich habe auch versucht statt 3x [a-z] [a-z]{3} zu schreiben. Auch habe ich versucht Meta characters wie \d \D zu verwenden weiß aber nicht wie ich die reinschreibe ohne Fehler zu bekommen. Außerdem liege ich richtig in der Annahmme, dass die erste Stelle

Die Fehlermeldung ist in allen Versuchen die Gleiche. Ich schaffe es nicht den Syntax für die true Bedingung zu definieren:

1638297580297.png
 

Anhänge

  • 1638297162600.png
    1638297162600.png
    60,3 KB · Aufrufe: 2
Kannst du erklären, was das {8} bewirkt?
Ich wollte damit definieren, dass der String mindestens 8 Zeichen haben soll, habe es aber auch einfach mal weggelassen und bekomme das gleiche Ergebnis bzw. hatte auch versucht zu schreiben {8,16}. ich glaube dass für sich stehend es heißt dass der vorangegegangene ausdruck 8x wiederholt werden muss, was ja dann nicht dem entsprecht was ich angeben möchte. I
 
Die Länge 8 kannst du ignorieren, wenn du das Ganze explizit ausformulierstl.

4 Zeichen sind ja schon vorgegeben. Dass das Ganze mit
Code:
[A-Z][a-z]{3}
anfängt, ist also schon mal gut.
Das 5. Zeichen kann alles bis auf eine Ziffer sein, da nur das 6. Zeichen eine Ziffer sein darf.
Das 6. Zeichen muss eine Ziffer sein
Das 7. und 8. Zeichen dürfen alles bis auf eine Ziffer sein.
Code:
[A-Z][a-z]{3}[^0-9][0-9][^0-9]{2}

... und damit haben wir die Länge 8 erreicht. Du brauchst selbige nicht zu prüfen.

Der ganze Rest dahinter (optional) darf alles beinhalten außer Ziffern
Java:
[A-Z][a-z]{3}[^0-9][0-9][^0-9]{2}([^0-9]+)?

 
Die Länge 8 kannst du ignorieren, wenn du das Ganze explizit ausformulierstl.

4 Zeichen sind ja schon vorgegeben. Dass das Ganze mit
Code:
[A-Z][a-z]{3}
anfängt, ist also schon mal gut.
Das 5. Zeichen kann alles bis auf eine Ziffer sein, da nur das 6. Zeichen eine Ziffer sein darf.
Das 6. Zeichen muss eine Ziffer sein
Das 7. und 8. Zeichen dürfen alles bis auf eine Ziffer sein.
Code:
[A-Z][a-z]{3}[^0-9][0-9][^0-9]{2}

... und damit haben wir die Länge 8 erreicht. Du brauchst selbige nicht zu prüfen.

Der ganze Rest dahinter (optional) darf alles beinhalten außer Ziffern
Java:
[A-Z][a-z]{3}[^0-9][0-9][^0-9]{2}([^0-9]+)?

Vielen Dank! Also lag der logische Fehler dadrin, dass ich nicht definiert habe, dass nach der 8 Stelle alles vorkommen darf außer den Zahlen? Ich habe mir die Postfix Operator + und ? nochmal angeschaut verstehe aber nicht so recht wie genau die hier funktionieren. Heißt es, dass nach einem beliebigen Zeichen ungleich einer Zahl nochmal ein Zeichen kommt dass dieser Wertmengenbedingung entspricht und was genau bewirkt dann das "?" hier ?
 
Zu allererst: Der letzte Term führt nicht zum gewünschten Ergebnis, da hab ich was falsch gemacht. Gleich dazu mehr

Das "?" heißt, dass der Ausdruck vorher optional ist.
Das "+" heißt, dass von dem, was vor dem "+" steht, mehrere vorkommen können, mit unbestimmter Anzahl, aber mindestens 1.

Was hier also steht: Es kommt vielleicht eine Zeichenkette aus mindestens 1 Zeichen, die alles außer Ziffern beinhaltet.

Allerdings verhindert dies nicht, dass Ziffern diesem optionalen Block folgen.

Ich hab nämlich nur geprüft, ob so eine Kette vorkommt, aber nicht ob auch eine vorkommt, die NICHT dem Muster entspricht.

Das hier wird nämlich als Match erkannt: "__Abcde6gh___235__"
Dabei werden "__" am Anfang einfach ignoriert und auch "235__" am Ende.

Edit: Hab's. Mit "^" und "/" geht's
Java:
^[A-Z][a-z]{3}[^0-9][0-9][^0-9]{2}([^0-9]+)?$
 
Zuletzt bearbeitet:

Zurück
Oben