RegEx aus einem String als String-Array zurückgeben

FelixN

Mitglied
Hi,

folgende Aufgabe:
Erstellen einer Methode, die aus einem String alle Wörter der Länge 7, die nicht mit einem Vokal beginnen, als String-Array zurückgibt.
Meine Methode funktioniert gut, außer wenn das Wort am Satzanfang steht. Es nimmt aber immer das Leerzeichen vor dem Wort mit rein..
wenn ich aber aus [^aeiouAEIOU]\\w{7} -> [^aeiouAEIOU]\\w{6} mache, dann fehlt der letzte Buchstabe. Jemand ne Idee wie ich den RegEx umschreiben kann?

Code:
    public static String [] extractWords (String text) {
        String pattern = "[^aeiouAEIOU]\\w{7}";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        //erforderte Größe des Arrays berechnen
        int hochzaehlen = 0;
        while (m.find()) {
            hochzaehlen++;
        }
        m.reset();
        //Array fuellen
        String[] array = new String[hochzaehlen];
        int index = 0;
        while (m.find()) {
            array[index] = m.group();
            index++;
        }
        return array;
    }
    
    //Test in main
    public static void main(String[] args) {
      String text1 = "Bayerin aha. Die Worte Bayerin oder Ecuador haben sieben Stellen";
        String [] woerter = extractWords(text1);

        for (String b : woerter) {
            System.out.println(b);
        }

DANKEE 🙂
 
Stimmt.. ja das erste Zeichen soll ein Buchstabe sein, also aus [A-za-z], ausgeschlossen sind eben die Vokale.
"[A-Za-z(^aeiouAEIOU)]\\w{6}"

so macht es mir jetzt zwar nur die 7 Stellen, aber schließt mir die Vokale nicht aus -.- komm nicht wirklich klar mit den RegEx Ausdrücken
 
Zuletzt bearbeitet:
Der Zirkumflex ^ übt seine Sonderfunktion als Metazeichen innerhalb einer Zeichenklasse nur dann aus, wenn er dort als erstes Zeichen vorkommt. Der Ausschnitt (^aeiouAEIOU) deines Ausdrucks fügt deiner Zeichenklasse also nur die drei Zeichen (^) als gültig hinzu (die Vokale sind an der Stelle ja ohnehin bereits gültig). Dein offenbar beabsichtigtes Prinzip, erst eine Menge von Zeichen als "gültig" und anschließend eine Teilmenge davon als "doch nicht gültig" zu deklarieren, funktioniert so nicht. Eine Zeichenklasse ist also entweder insgesamt invertierend oder insgesamt nicht invertierend. Allerdings kannst du dabei alle vordefinierten Zeichenklassen nutzen, unter denen es ja auch invertierende und nicht invertierende gibt.
 
ach mensch.. glaub passt doch net wirklich. Es findet mir so auch entsprechende Wörter innerhalb eines Wortes. (z.B aus bestellen dann das "stellen")..

heisst das \\b nicht, dass zuerst eine Wortgrenze kommen soll ?!
 

Neue Themen


Zurück
Oben