Wie erkennt man Sonderzeichen im String?

Guten morgen zusammen,
Ich bin noch ziemlich neu in der Welt des Programmieren und zur Übung wollte ich ein Programm schreiben, wo man ein Passwort eingibt und es Kreterin erfüllen muss.
Kreterien: Mind. Ein Großbuchstabe && Mind. Zwei Kleinbuchstabe && Mind. Eine Zahl && Mind. Ein Sondezeichen
Mein Code Sieht wie folgt aus:
Java:
import java.util.Scanner;

public class passwortgenerator{
  public static void main(String[] args){
    String wort;
    System.out.println("Geben sie ihr Passwort ein");
    Scanner sc = new Scanner(System.in);
    wort = sc.next();
    char charWort = wort.charAt(0);
    for (int x = 0; x <= wort.length() && wort.length() >=9; x++) {
       
        if(Character.isUpperCase(charWort)){
            if(Character.isLowerCase(charWort)){
                if(Character.isDigit(charWort)){

                }else{
                System.out.print("Fehler");
                }
            }else{
            System.out.print("Fehler");
            }
        }else{
        System.out.print("Fehler");   
      }
    }
  }
}

Ich habe nun Zwei Probleme:
1. (Das wichtige) Wie erkennt man, am besten ohne ASCII, ob Sonderzeichen enthalten sind?
2. Wie kann man erkennen, wie oft (z.B.) Kleinbuchstaben enthalten sind?

Es tut mir leid nur ich habe wirklich nichts perfekt passendes gefunden, was funktioniert hat... Ich bedanke mich schon einmal Herzlich für eure Hilfe!
MfG Cookie
 
Dankeschön :)

Ist die Überprüfung des Sonderzeichens so Korrekt?
Java:
if(wort.charAt(x)<=47 || wort.charAt(x)>=58 && wort.charAt(x)<=64 || wort.charAt(x)>=91 && wort.charAt(x)<=96 || wort.charAt(x)>=123 ){   
                    }else{
                    System.out.print("Mindestens ein Sonderzeichen muss Enthalten sein.");  
                    }
 

VfL_Freak

Top Contributor
Moin,

Ist die Überprüfung des Sonderzeichens so Korrekt?
Java:
if(wort.charAt(x)<=47 || wort.charAt(x)>=58 && wort.charAt(x)<=64 || wort.charAt(x)>=91 && wort.charAt(x)<=96 || wort.charAt(x)>=123 )
{}
else
{
     System.out.print("Mindestens ein Sonderzeichen muss Enthalten sein.");
}
Im Prinzip würde es funktionieren, wobei ich die leere IF-Anweisung sehr unschön/unleserlich finde!
Du könntest die Prüfungen andersherum prüfen und dadurch das ELSE sparen !

Aber Du hast oben noch einen Denkfehler in der IF-Verschachtelung:
Java:
if(Character.isUpperCase(charWort))
{
    if(Character.isLowerCase(charWort))
    {
        if(Character.isDigit(charWort))
        {}
        else
        {
            System.out.print("Fehler");
        }
    }
    else
    {
        System.out.print("Fehler");
    }
}
else
{
    System.out.print("Fehler"); 
}
Du prüfst hier ja zunächst auf 'UpperCase'.
Wenn es KEIN Uppercase ist, gehst Du sofort mit der Ausgabe "Fehler" raus!
Die anderen Fälle ('LowerCase' und 'Digit') werden dann nicht mehr geprüft!
Wenn es aber ein Uppercase ist, dann machen die weiteren Prüfungen auf 'LowerCase' und 'Digit' nicht wirklich Sinn (entweder IST ein Großbuchstabe oder nicht) - zumal dann immer FEHLER ausgegeben würde !!

Gruß Klaus
 
Moin,

Du prüfst hier ja zunächst auf 'UpperCase'.
Wenn es KEIN Uppercase ist, gehst Du sofort mit der Ausgabe "Fehler" raus!
Die anderen Fälle ('LowerCase' und 'Digit') werden dann nicht mehr geprüft!
Wenn es aber ein Uppercase ist, dann machen die weiteren Prüfungen auf 'LowerCase' und 'Digit' nicht wirklich Sinn (entweder IST ein Großbuchstabe oder nicht) - zumal dann immer FEHLER ausgegeben würde !!

Gruß Klaus
Es ist ja ein String der an mehreren Stellen geprüft werden soll ( in diesem Fall ein Passwort ) und es soll geprüftwerden ob dies Alles vorhanden ist. Wenn ich einen Logik Fehler habe könntest du mir ja evtl. einen Tipp geben?
 

VfL_Freak

Top Contributor
Du prüfst ja jeweils nur EIN Zeichen des Strings, nicht alles auf einmal !
Also für EIN Zeichen könntest Du es bei Deinem Ansatz so prüfen:
Java:
if( !Character.isUpperCase(charWort) && !Character.isLowerCase(charWort) && !Character.isDigit(charWort) )
{
    // hier weißt Du jetzt, dass das zeichen KEIN Groß- oder Kleinbuchstabe oder Digit ist!!
}
Jetzt musst Dir nur noch überlegen, wie Du das für alle Zeichen prüfst und dabei merkst, ob eines der Kriterien für das ganze Wort nicht erfüllt ist!

Gruß Klaus
 

JStein52

Top Contributor
Und hier der reguläre Ausdruck:

Code:
matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\!§$%&/()\\[\\]{}=?ß#.:,;-<>|°+*@]).{8,20}$"));
Wobei die zulässigen Sonderzeichen in der letzten eckigen Klammer einzeln aufgeführt sind. Wo notwendig mit Backslashes entwertet

Edit: und die Länge eines Passwortes ist auf 8..20 Zeichen festgelegt
 

Thallius

Top Contributor
Und hier der reguläre Ausdruck:

Code:
matches("^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\\\\!§$%&/()\\[\\]{}=?ß#.:,;-<>|°+*@]).{8,20}$"));
Wobei die zulässigen Sonderzeichen in der letzten eckigen Klammer einzeln aufgeführt sind. Wo notwendig mit Backslashes entwertet

Edit: und die Länge eines Passwortes ist auf 8..20 Zeichen festgelegt

Aber irgendwie krank ist das schon oder nicht? ;)
 

JStein52

Top Contributor
Aber irgendwie krank ist das schon oder nicht?
Kommt drauf an ... wenn man regex mag ist es einfach. Im übrigen löst es halt alles auf einen Streich. Wenn du das auscodierst wird es auch krank.

Edit: im übrigen liest es sich doch wunderschön:
mindestens 1 Ziffer, mindestens 1 Kleinbuschstabe, mindestens 1 Grossbuchstabe und mindestens 1 Sonderzeichen aus der Menge ...... und das ganze 8 - 20 Zeichen lang. Das kannst du dem Benutzer auch noch schön in einer Infobox anzeigen. Und ist mehr oder weniger der Standard für Passworte
 
Zuletzt bearbeitet:
Ich habe das Problem nun etwas anders gelöst:
Java:
    public boolean istGueltig() {   

        int großbuchstabe = 0; 
        int kleinbuchstabe = 0;
        int zahl = 0;
        int sonderzeichen = 0;

        for (int x = 0; x < wort.length() && wort.length() >= 9; x++) {
            if (Character.isUpperCase(wort.charAt(x))) {
                großbuchstabe++;
            }
            if (Character.isLowerCase(wort.charAt(x))) {
                kleinbuchstabe++;
            }
            if (Character.isDigit(wort.charAt(x))) {
                zahl++;
            }
            if (!Character.isLetterOrDigit(wort.charAt(x))) {
                sonderzeichen++;
            }
        }

        return großbuchstabe >= 2 && kleinbuchstabe >= 2 && zahl >= 2 && sonderzeichen >= 2;

    }

Also es ist für mich die beste lösung gewesen und danke den anderen für die Hilfe, Außerdem hoffe ich ich kann noch jemanden hiermit helfen.


Tipps:
isUpperCase -> Testet auf Großbuchstaben
isLowerCase -> Testet auf Kleinbuchstaben
isDigit -> Testet auf Zahlen
!(not) isLetterOrDiggit -> Testet auf Sonderzeichen ( Alles außer Buchstaben und Zahlen )
 

VfL_Freak

Top Contributor
Moin,

na, sieht doch soweit prima aus!

Tipp: ich würde dies hier
return großbuchstabe >= 2 && kleinbuchstabe >= 2 && zahl >= 2 && sonderzeichen >= 2;
immer noch zusätzlich klammern ...
return( (großbuchstabe >= 2) && (kleinbuchstabe >= 2) && (zahl >= 2) && (sonderzeichen >= 2) );
Das ist hier zwar grundsätzlich obsolet, schafft aber Leserlichkeit und vermeidet ggf. Fehler (etwa wenn etwas geändert wird).

Allerdings werden Deine eingangs beschriebenen Kriterien
Kreterien: Mind. Ein Großbuchstabe && Mind. Zwei Kleinbuchstabe && Mind. Eine Zahl && Mind. Ein Sondezeichen
nicht wirklich erfüllt, da Du jetzt nur dann TRUE ausgibst, wenn von allen vier Zeichenarten mindestens zwei vorhanden sind !!
Du kannst dies ja zur Übung auch mal korrigieren!

Gruß Klaus
 
Danke @VfL_Freak, Ich habe mir die Kriterien (Für meine Maße) etwas erschwert um mehr Übung vom Praktischem zu bekommen, falls ich etwas Verwirrung dadurch gestiftet habe tut mir das leid und ich Korrigiere die Kriterien in der Frage falls weitere Anfänger dies auch als Übung benutzen wollen. Weiterhin Danke für den Tipp damit mein Code Leserlicher wird.
return( (großbuchstabe >= 2) && (kleinbuchstabe >= 2) && (zahl >= 2) && (sonderzeichen >= 2) );
Ich hoffe, ich habe die meisten oder alle Forums Regeln beachtet und freue mich weiterhin mich hier zu bereichern.
Lg Cookie
 
Also am Anfang haben die Kriterien die Oben standen gegolten, aber um mir selber alles etwas zu erschweren habe ich gesagt das jedes Kriterium 2x Vorkommen muss.

Mit den Oben stehenden Kriterien sieht der Code wie Folgt aus:

Java:
    public boolean istGueltig() {   

        int keinbuchstabe = 0;  
        int kleinbuchstabe = 0;
        int zahl = 0;
        int sonderzeichen = 0;

        for (int x = 0; x < wort.length() && wort.length() >= 9; x++) {
            if (Character.isUpperCase(wort.charAt(x))) {
                großbuchstabe++;
            }
            if (Character.isLowerCase(wort.charAt(x))) {
                 kleinbuchstabe++;
            }
            if (Character.isDigit(wort.charAt(x))) {
                zahl++;
            }
            if (!Character.isLetterOrDigit(wort.charAt(x))) {
               sonderzeichen++;
            }
        }

        return ((großbuchstabe>0) && (kleinbuchstabe >= 2) && (zahl>0) && (sonderzeichen>0)); //Rückgabe von

    }

Tut mir leid für die Verwirrung
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
O if Abfrage erkennt String nicht Java Basics - Anfänger-Themen 1
W Programm dass Palindrome erkennt Java Basics - Anfänger-Themen 6
A Wie erkennt die JVM welche class verwendet werden muss? Java Basics - Anfänger-Themen 3
Dimax Wie erkennt man dass der gesuchte am Zeilenanfang steht Java Basics - Anfänger-Themen 10
P if - Statement erkennt variable nicht. Java Basics - Anfänger-Themen 12
C Gui- Klasse erkennt Übergabeparameter aus Methode nicht Java Basics - Anfänger-Themen 4
A Erste Schritte Mein Programm erkennt die variable EinAus.readInt nicht Java Basics - Anfänger-Themen 15
J Programm was üer Runtime.getRuntime gestartet wird erkennt String Parameter nicht Java Basics - Anfänger-Themen 0
T Config: Projekt erkennt Javaversion nicht Java Basics - Anfänger-Themen 12
O Watch Service erkennt Datei Änderung nicht Java Basics - Anfänger-Themen 0
A Hat jemand einen ratschlag, wie java beim replaceALL eine geschweifte klammer erkennt ? Java Basics - Anfänger-Themen 5
E Input/Output Konsole erkennt meinen Buchstaben nicht Java Basics - Anfänger-Themen 12
D Java erkennt eine deklarierte Variable nicht Java Basics - Anfänger-Themen 2
K Erkennt repaint nicht Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
O Erkennt Objekt nach dem Deserialisierung nicht Java Basics - Anfänger-Themen 5
J JDK installieren JCreator erkennt JDK nicht. "Failed to start the following executable" Java Basics - Anfänger-Themen 3
D Variablen Methode erkennt Variable nicht Java Basics - Anfänger-Themen 6
M JDK 1.6 installiert aber PC erkennt es nicht Java Basics - Anfänger-Themen 2
E ActionListener erkennt instanz nicht Java Basics - Anfänger-Themen 9
M java erkennt import-klassen nicht?! Java Basics - Anfänger-Themen 39
E Android: OnClickListener erkennt Buttons nicht Java Basics - Anfänger-Themen 7
L Warum erkennt java meine methode nicht? Java Basics - Anfänger-Themen 17
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
H Funktion erkennt das return-statement nicht Java Basics - Anfänger-Themen 12
K Konsolenanwendung - Taschenrechner - erkennt Operanten nicht Java Basics - Anfänger-Themen 5
S Problem mit Eclipse: erkennt vorhandene Main-Methode nicht Java Basics - Anfänger-Themen 13
R JRE 1.5.0 Update 7 Install erkennt nicht Firefox/Netscape Java Basics - Anfänger-Themen 3
D Win98 erkennt keine java Befehle.Umgebungsvariablen falsch? Java Basics - Anfänger-Themen 7
R JBuilder erkennt keine getrennte Klassen. Java Basics - Anfänger-Themen 6
Juelin Sonderzeichen wie Euro (€) Java Basics - Anfänger-Themen 4
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
J ireport Designer / CSV / Sonderzeichen was läuft falsch Java Basics - Anfänger-Themen 7
W Methoden Konvertierung von Sonderzeichen Java Basics - Anfänger-Themen 2
S Sonderzeichen '|' (u007C) mit Scanner einlesen Java Basics - Anfänger-Themen 1
T byte[] zu String mit Sonderzeichen Java Basics - Anfänger-Themen 2
J Datentypen Cast von int zu char führ zu 'Sonderzeichen' Java Basics - Anfänger-Themen 2
B Char-Vergleich Sonderzeichen Java Basics - Anfänger-Themen 6
X String Sonderzeichen/Zahlen erkennen Java Basics - Anfänger-Themen 3
E String soll mit Großbuchstaben anfangen und keine Sonderzeichen enthalten Java Basics - Anfänger-Themen 4
M Sonderzeichen werden nicht erkannt Java Basics - Anfänger-Themen 3
A Datentypen Sonderzeichen / Strings ersetzen Java Basics - Anfänger-Themen 3
K Sonderzeichen auf der Windowskonsole ausgeben Java Basics - Anfänger-Themen 8
turmaline Ein regulärer Ausdruck für HTML-Sonderzeichen Java Basics - Anfänger-Themen 3
F Sonderzeichen bei XML Serialisierung nicht konvertieren Java Basics - Anfänger-Themen 7
S String auf Sonderzeichen untersuchen Java Basics - Anfänger-Themen 6
V Sonderzeichen als eigene "Operatoren" im JTextField Java Basics - Anfänger-Themen 4
M Sonderzeichen beim usedelimiter Java Basics - Anfänger-Themen 4
Z Sonderzeichen in einem String gezeichnen/bearbeiten Java Basics - Anfänger-Themen 6
S Sonderzeichen "§" wird nicht erkannt - Stichwort Encoding! Java Basics - Anfänger-Themen 13
S Sonderzeichen in einem String erkennen Java Basics - Anfänger-Themen 20
Benji0815 Sonderzeichen Java Basics - Anfänger-Themen 8
M Sonderzeichen in einer Datei auslesen Java Basics - Anfänger-Themen 3
T JOption Pane: Sonderzeichen verbieten? Java Basics - Anfänger-Themen 14
G String und Sonderzeichen Java Basics - Anfänger-Themen 6
T Sonderzeichen in label Java Basics - Anfänger-Themen 4
B Exception bei ImageIO wegen sonderzeichen Java Basics - Anfänger-Themen 11
Semox Umwandlung von Sonderzeichen in HTML-Datei mit Ausgabe Java Basics - Anfänger-Themen 7
D Sonderzeichen ä,ü,ö werden als ? ausgegeben Java Basics - Anfänger-Themen 3
T Sonderzeichen Java Basics - Anfänger-Themen 2
G Sonderzeichen automatisch ändern lassen Java Basics - Anfänger-Themen 23
A XML-Datei erzeugen+Sonderzeichen erlauben Java Basics - Anfänger-Themen 10
L Sonderzeichen automatisch escapen. Java Basics - Anfänger-Themen 7
U Sonderzeichen die zweite Java Basics - Anfänger-Themen 16
H GPS über ser. Schnittst. liefert teilweise Sonderzeichen Java Basics - Anfänger-Themen 3
M RandomAccessFile schreibt Sonderzeichen vor String Java Basics - Anfänger-Themen 2
B String mit Sonderzeichen wie " oder = überprüfen Java Basics - Anfänger-Themen 2
H Datei mit Sonderzeichen Java Basics - Anfänger-Themen 8
G Newline Sonderzeichen aus File entfernen u als String speic? Java Basics - Anfänger-Themen 3
T Robot-Problem mit Sonderzeichen Java Basics - Anfänger-Themen 2
M java sonderzeichen filtern Java Basics - Anfänger-Themen 3
M Konvertierung v. Strings (evtl. mit Sonderzeichen) nach HTML Java Basics - Anfänger-Themen 8
M Char Array mit Sonderzeichen in String umwandeln Java Basics - Anfänger-Themen 21
S Umlaute und Sonderzeichen erkennen Java Basics - Anfänger-Themen 12
S HTML Sonderzeichen in Unicode wandeln Java Basics - Anfänger-Themen 5
C Sonderzeichen (ä, ö, ü) in JTextArea Java Basics - Anfänger-Themen 9
J Sonderzeichen Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben