Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen?

Hi, habe den String "4ufhiuh89f3h4iu8" ich soll jetzt prüfen ob das "u" zu einer geraden Anzahl vorkommt.

Ich hätte das so gemacht
"4ufhiuh89f3h4iu8".matches("{0,2}")

Aber das klappt leider nicht, gerade Anzahl meint, es kommt 0'mal vor oder so oft, dass modulo 2 =0 wäre.
 
Nein, geschwungene Klammern in einem Regulaeren Ausdruck geben entweder eine Anzahl oder einen Bereich an.

Code:
[u]{0,2} = Die Zeichengruppe mit dem Zeichen "u" soll zwischen 0 und 2 beliebig oft vorkommen (beides inklusive).
u{0,2} = Das Zeichen "u" soll zwischen 0 und 2 beliebig oft vorkommen (beides inklusive).
u{0,} = Das Zeichen "u" soll zwischen 0 und unendlich beliebig oft vorkommen (beides inklusive).
u{,2} = Das Zeichen "u" soll zwischen 0 und 2 beliebig oft vorkommen (beides inklusive).

Du kannst also mit Regulaeren Ausdruecken nicht eine solche Logik ausdruecken die du gerne haettest (okat, ich nehme das zurueck bevor mir jemand das REGEX DES TODES in's Gesich klatscht welches dass tatsaechlich kann).



Die einfachere Moeglichkeit hier waere eine simple Schleife in welchem du einfach die "u"s zaehlst:

Java:
// Der "alte" Weg, welche "char"s benutzt. Ein "char" kann aber nicht den vollen
// Raum von Unicode abbilden, daher sollte man eher "codePoints" verwenden.

int uCounter = 0;

for (char character : "4ufhiuh89f3h4iu8".toCharArray()) {
    if (character == 'u') {
        uCounter++;
    }
}

System.out.println("Anzahl \"u\": " + Integer.toString(uCounter));

Java:
// Der "neue" Weg, welcher mit "codePoints" arbeitet und daher keine
// Probleme mit Unicode hat.

int uCounter = 0;
int uCodePoint = Character.codePointAt("u", 0);

for (int codePoint : "4ufhiuh89f3h4iu8".codePoints().toArray()) {
    if (codePoint == uCodePoint) {
        uCounter++;
    }
}

System.out.println("Anzahl \"u\": " + Integer.toString(uCounter));

Mit der Anzahl kannst du dann machen was du willst.

Eventuell ein noch besserer Weg waere es, sich mit dem String den du suchst sich durch den String zu bewegen, in etwas so:

Java:
int uCounter = 0;
int nextUIndex = "4ufhiuh89f3h4iu8".indexOf("u");

while (nextUIndex >= 0) {
    uCounter++;
    
    nextUIndex = "4ufhiuh89f3h4iu8".indexOf("u", nextUIndex + 1);
}

Der Vorteil von der Methode ist, dass du nach beliebig langen Strings suchen kannst um diese zu zaehlen.
 
oder
Java:
String st = "4ufhiuh8u9f3h4iu8";
        Pattern pattern = Pattern.compile("[u]");
        Matcher matcher = pattern.matcher(st);
        int x = 0;
        while (matcher.find()) {
            x++;
        }
        if(x%2==0) {
            System.out.println("Anzahl gerade");
        }

Java:
int x = "4ufhiuh89f3h4iu8".replaceAll("[^u]").length();
        if(x%2==0) {
            System.out.println("Anzahl gerade");
        }
 
Zuletzt bearbeitet:
oder
Java:
String s = "4ufhiuh89f3h4iu8";
int count = 0;
for (int from = s.indexOf("u"); from > 0; from = s.indexOf("u", from + 1)) count++;
System.out.println(count);

EDIT: Übersehen, das steht ja schon oben. 🙂
 
Zuletzt bearbeitet:

Zurück
Oben