Lösung für RegEx in Java gesucht

CiPieF

Neues Mitglied
Hallo zusammen, ich suche eine Lösung für einen regulären Ausdruck. In anderen Sprachen funktioniert mein Ansatz und ich wüsste auch, wie es umständlich manuell lösen könnte, würde dies aber gerne eleganter lösen.

Nun zum Punkt, ich möchte gerne Strings dynamisch mittels replace umschreiben.

String string = "wie soll das gehen?" -> "Wie Soll Das Gehen?"

(1) replace = replace.replaceAll("[ ][a-z]", String.toUpperCase(" $0"));
(2) replace = replace.replaceAll("[ ][a-z]", String.toUpperCase("[ ][A-Z]"));

Mein Ergebnis sieht dann so aus ->
(1) "wie soll das gehen?"
(2) "[A-Z]ie [A-Z]oll [A-Z]as [A-Z]ehen?"

Der RegEx funzt wohl, nur wie krieg ich den gesuchten Buchstaben groß geschrieben?
Natürlich könnte ich das auch mit ner Schleife zeichenweise umschreiben, aber für mich nicht Sinn der Sache und langfristig auch sehr umständlich finde ich.
 
Deine Regexp-Logik ist etwas falsch. Dein String.toUpperCase("...") macht den Inhalt des Strings, den du #toUpperCase() übergibst gross, wertet aber nicht dein Gruppe (die du vorne auch nicht spezifiziert hast) aus.

Du müsstest dann mit Pattern und Matcher arbeiten, dann könntest du es machen. Da dein String aber nie mit einem Leerzeichen (übrigens ist auch ein "\s" für Whitespace-Character möglich).

Kompiliere also ein Pattern wie das hier:
Code:
(?:^|\s)(\w)+(?:[.!?,:;-_+*/"§$%&()=])?
(?:...) ist eine "non-capturing group" - also eine nicht erfasste. Im Pattern oben sind das Leerzeichen und Zeilenanfang sowie alle möglichen Sonderzeichen. Eventuell musst du in die erste Gruppe auch noch Bindestriche etc. aufnehmen.
das Pattern kann im Moment nur recht eingeschränkt unterschiedliche Texte (keine mehrfachen Leerzeichen, keine mehrfachen Satzzeichen, etc.).
Du musst vom kompilierten Pattern dann einen Matcher auf den zu testenden String anwenden und per
Code:
while(matcher.find()) {...}
die einzelnen Blöcke holen.
Dann so etwas wie das folgende auf die einzelnen Blöcke anwenden:
Code:
String group = matcher.group(0);
String result = group.substring(0, 1).toUpperCase() + group.substring(1, group.length());

----------------------

Testen kann man IMHO ziemlich gut hier:
RegexPlanet: online regular expression testing for Java
 

Zurück
Oben