replaceAll nonalphanumeric chars

zu1u

Mitglied
hi,
ich wuerde gerne in einem String alle nicht alphanumerischen Chars mit einem \ escapen. Zunaechst einmal zaehlen neben Buchstaben und Zahlen auch . , ! usw zu alphanumerischen Chars?! in der java api habe ich bei den Patterns \p{Alnum} gefunden... allerdings steht da bei dass es nur fuer US Ascii ist ?!

naja ich habe es mal so versucht
String test = "abc!@()!()@.";
test = test.replaceAll("[^\\p{Alnum}]", "\\[^\\p{Alnum}]");

aber das funktioniert nicht. Wie kann ich denn auf das Zeichen in 'replace' string zurueck greifen, dass ersetzt werden soll?

und wieso fuehrt
test = test.replaceAll("[^\\p{Alnum}]", "\\");
dass auf den Fehler java.lang.StringIndexOutOfBoundsException: String index out of range: 1

kann mir jemand helfen? ich komme leider nicht weiter... danke
 
Zunaechst einmal zaehlen neben Buchstaben und Zahlen auch . , ! usw zu alphanumerischen Chars?!
Nein... wie in der API beschrieben a-ZA-Z0-9.

in der java api habe ich bei den Patterns \p{Alnum} gefunden... allerdings steht da bei dass es nur fuer US Ascii ist ?!
Wo hast du denn das gelesen?


String test = "abc!@()!()@.";
test = test.replaceAll("[^\\p{Alnum}]", "\\[^\\p{Alnum}]");

aber das funktioniert nicht. Wie kann ich denn auf das Zeichen in 'replace' string zurueck greifen, dass ersetzt werden soll?

Auf alles was du in runde Klammer einschließt kannst du später mit $<zahl> zugreifen.

und wieso fuehrt
test = test.replaceAll("[^\\p{Alnum}]", "\\");
dass auf den Fehler java.lang.StringIndexOutOfBoundsException: String index out of range: 1

Genau wie oben hast du nicht bedacht dass \\ für die escape Sequence steht. Dahinter wird also noch ein Zeichen erwartet. Daher bekommst du die Exception. Für einen einzelnen Backslash mußt du \\\\ verwenden.

Also probier mal ob dus nun hinbekommst. Ansonsten:
String test = "abc!@()!()@.";
test = test.replaceAll("([^\\p{Alnum}])", "\\\\$1");
 
AW: replaceAll nonalphanumeric chars
Zitat:
Zitat von zu1u
clear.gif

Zunaechst einmal zaehlen neben Buchstaben und Zahlen auch . , ! usw zu alphanumerischen Chars?!

Nein... wie in der API beschrieben a-ZA-Z0-9.

das finde ich nicht, ich habe hier geschaut
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html
dort steht auch bei \p{Alnum} US-ASCII only
bin ich da falsch?

ansonsten vielen dank!
 
Ach ganz oben drüber steht das mit dem US-ASCII. Naja wenn du noch die deutschen Umlaute mit reinhaben willst musst du dir das halt selber schreiben. Ansonsten kann du das so verwenden. Auf jeden Fall steht da sehr wohl aus welchen Zeichen das besteht:
\p{Alnum} An alphanumeric character:[\p{Alpha}\p{Digit}]
\p{Alpha} An alphabetic character:[\p{Lower}\p{Upper}]
\p{Lower} A lower-case alphabetic character: [a-z]
\p{Upper} An upper-case alphabetic character:[A-Z]
\p{Digit} A decimal digit: [0-9]
 
Zurück