Wie kann man Sonderzeichen in einer Zeichenfolge ersetzen?

Ich habe eine Zeichenfolge mit vielen Sonderzeichen. Ich möchte alle entfernen, aber alphabetische Zeichen behalten.

Wie kann ich das machen?

Das kommt darauf an, was du meinst. Wenn Sie sie einfach loswerden wollen, tun Sie Folgendes:
(Update: Anscheinend wollen Sie auch Ziffern behalten, benutzen Sie die zweiten Zeilen in diesem Fall)

String alphaOnly = input.replaceAll("[^a-zA-Z]+",""); String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+",""); 

oder das Äquivalent:

 String alphaOnly = input.replaceAll("[^\\p{Alpha}]+",""); String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+",""); 

(Alle diese können erheblich verbessert werden, indem das Regex-Muster vorkompiliert und in einer Konstanten gespeichert wird)

Oder mit Guava :

 private static final CharMatcher ALNUM = CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z')) .or(CharMatcher.inRange('0', '9')).precomputed(); // ... String alphaAndDigits = ALNUM.retainFrom(input); 

Aber wenn Sie akzentuierte Zeichen in etwas Sinnvolles verwandeln wollen, das immer noch ascii ist, schauen Sie sich diese Fragen an:

  • Konvertieren der Java-Zeichenfolge in ASCII
  • Java ändern áéőűú zu aeouu
  • ñ ǹ ñ ñ ṅ ņ ṋ ṋ ̈ ɲ ƞ ᶇ ɳ> -> n oder Entfernen Sie diakritische Zeichen von Unicode-Zeichen

Ich benutze das.

 s = s.replaceAll("\\W", ""); 

Es ersetzt alle Sonderzeichen von String.

Hier

\ w: Ein Wortzeichen, kurz für [a-zA-Z_0-9]

\ W: Ein Nicht-Wort-Zeichen

Sie können die folgende Methode verwenden, um alphanumerische Zeichen zu behalten.

 replaceAll("[^a-zA-Z0-9]", ""); 

Und wenn Sie nur alphabetische Zeichen behalten möchten, verwenden Sie dies

 replaceAll("[^a-zA-Z]", ""); 
 string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", ""); 

Hier werden alle Sonderzeichen außer Leerzeichen, Komma und kaufmännisches Und ersetzt. Sie können auch Leerzeichen, Komma und kaufmännisches Und zwar mit dem folgenden regulären Ausdruck weglassen.

 string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", ""); 

Wobei Input die Zeichenfolge ist, die wir brauchen, um die Zeichen zu ersetzen.

Sie können einfache reguläre Ausdrücke für Zeichenfolgen verwenden, um alle Sonderzeichen zu finden, oder Muster- und Matcher-classn verwenden, um benutzerdefinierte Zeichenfolgen zu suchen, zu ändern oder zu löschen. Dieser Link enthält einige einfache und leicht verständliche Beispiele für reguläre Ausdrücke: http://www.vogella.de/articles/JavaRegularExpressions/article.html

Sie können Unicode für dieses Junk-Zeichen vom Charactermap-Tool im Fenster pc erhalten und \ u Beispiel \ u00a9 für das Copyright-Symbol hinzufügen. Jetzt können Sie diese Zeichenfolge mit diesem speziellen Schrott-Zeichen verwenden, entfernen Sie keine Junk-Zeichen, sondern ersetzen Sie sie durch den richtigen Unicode.

Für Leerzeichen verwenden Sie “[^ az AZ 0-9]” dieses Muster

Ersetzen Sie alle Sonderzeichen durch

 replaceAll("\\your special character","new character"); 

ex: um alle Vorkommen von * durch Leerzeichen zu ersetzen

 replaceAll("\\*",""); 

* Diese statement kann jeweils nur einen Typ von Sonderzeichen ersetzen