SubString bis ersten Buchstaben: A-Z, a-z, Umlaut

Kryptaesthesie

Erfahrenes Mitglied
Hallo zusammen,

ich stehe gerade etwas auf dem Schlauch und komme einfach zu keiner Lösung.
Mein Ziel soll es sein, dass ich von einem String einen Substring haben möchte, der bis zum ersten Buchstaben geht.
Zahlen, Zeichen, Sonderzeichen sind egal. Es geht mir wirklich nur um Buchstaben.

Mein letzter Versuch ging in die nachfolgend aufgeführte Richtung, was allerdings immer das erste Wort, das gefunden wird, ausgibt.
Also aus "12345,6789 Mein String" wurde: "Mein".
Code:
        Matcher mf = Pattern.compile( "\\w*[A-Za-z]" ).matcher(stringIt);
        if(mf.find()) {
            stringIt = mf.group();
        }
        System.out.println("stringIt: " + stringIt);

Das kann doch eigentlich kein unlösbares Problem sein. :p
Aber ich bekomme es gerade nicht hin. Habt ihr eine Idee?

Beste Grüße
Gerrit
 
Wikipedia:
\w word character ein Buchstabe, eine Ziffer oder der Unterstrich, also [a-zA-Z_0-9] (und evtl. auch nicht-lateinische Buchstaben, z. B. Umlaute)

Bist du dir sicher, dass du das wolltest? In \w sidn auch bereits Buchstaben enthalten...

PS.: Wenn du den gefundenen Buchstaben nicht mit im Nachhinein verwenden möchtest, kannst du dir ein Abtrennen dieses Buchstaben durch Look-Arround-Assertions sparen.
 
Wikipedia:


Bist du dir sicher, dass du das wolltest? In \w sidn auch bereits Buchstaben enthalten...

PS.: Wenn du den gefundenen Buchstaben nicht mit im Nachhinein verwenden möchtest, kannst du dir ein Abtrennen dieses Buchstaben durch Look-Arround-Assertions sparen.

Ich kann dir leider nicht ganz folgen.
Vll bringe ich einmal Beispiele:
  • "123456 abc" --> "123456 "
  • "1234,5678 xyz" --> "1234,5678 "
  • "123xyz567" --> "123"
 
Hi,

ich würde das mit der String.split() Methode machen, die unterstützt auch RegEx.

Java:
public String mySplit(String str, boolean before) {
  String[] temp = str.split("[A-Za-z]", 2);

  if(before || temp.length == 1) {
    return temp[0];
  } else {
    return temp[1];
  }
}

String test1 = "12.345,67 Dies ist ein Test.";
String test2 = "12.345,67 987.65$";
String test3 = "a123456789";

String result1 = mySplit(test1, true); // = "12.345,67 "
String result2 = mySplit(test2, true); // = "12.345,67 987.65$"
String result3 = mySplit(test3, true); // = ""

// wenn du nicht von ersten, sondern den zweiten teil haben willst, isses nicht so ideal:
String result4 = mySplit(test1, false); // = "ies ist ein Test."
String result5 = mySplit(test3, false); // = "123456789"

Grüße,
BK
 
Zuletzt bearbeitet:
Ich kann dir leider nicht ganz folgen.
Vll bringe ich einmal Beispiele:
  • "123456 abc" --> "123456 "
  • "1234,5678 xyz" --> "1234,5678 "
  • "123xyz567" --> "123"

Deine Beispiels kann ich gut nachvollziehen und habe ich auch vorher so verstanden. Nur mit der Expression "\\w*[A-Za-z]" suchst du laut Definition von \\w "[a-zA-Z_0-9]*[A-Za-z]" oder in anderen Worten "Alle aufeinanderfolgende alphanumerischen Zeichen oder Unterstrich endend mit einem Buchstaben." Leerzeichen und Komma sind hier nicht enthalten, also ist der erste Part, der gefunden wird im ersten Beispiel "Mein", wobei 'n' der letzte eben erwähnte Buchstabe ist und "Mei" matched den davorgelagerten Part. Du solltest im Regex also die Menge der Buchstaben negieren. Zudem suchst du den ersten Buchstaben ebenfalls, d.h. er wird in deinem String enthalten sein, den müsstest du also anschließend noch abtrennen. Wenn du für diesen Buchstaben aber Look-Around Assertion verwendest, so wird der Buchstabe in die Suche mit einbezogen, jedoch nicht im String mit aufgeführt.

Alles in allem stimme ich jedoch Bratkartoffel zu, seine Darstellung ist der einfachere Weg und wäre auch von mir empfohlen.
 

Neue Beiträge

Zurück