it-swarm.com.de

Wie ersetze ich Sonderzeichen in einer Zeichenfolge?

Ich habe eine Zeichenfolge mit vielen Sonderzeichen. Ich möchte alle entfernen, aber alphabetisch bleiben.

Wie kann ich das machen?

76
Tanu

Das hängt davon ab, was du meinst. Wenn Sie sie nur loswerden möchten, tun Sie dies:
(Update: Anscheinend möchten Sie auch Ziffern beibehalten, verwenden Sie in diesem Fall die zweiten Zeilen.)

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 können erheblich verbessert werden, indem das Regex-Muster vorkompiliert und in einer Konstante gespeichert wird.)

Oder mit Guave :

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);

Wenn Sie jedoch Akzentfiguren in etwas Vernünftiges umwandeln möchten, das immer noch Ascii ist, schauen Sie sich diese Fragen an:

166

Ich benutze das. 

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

Es ersetzt alle Sonderzeichen von String.

Hier 

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

\ W: Ein Nicht-Word-Zeichen

58
Dhiral Pandya

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

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

Wenn Sie nur alphabetische Zeichen beibehalten möchten, verwenden Sie diese Option

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

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

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

Dabei ist Eingabe die Zeichenfolge, die zum Ersetzen der Zeichen benötigt wird.

1
Mike Clark

Nach dem Beispiel der Antwort von Andrzej Doyle halte ich die Verwendung von org.Apache.commons.lang3.StringUtils.stripAccents() für die bessere Lösung:

package bla.bla.utility;

import org.Apache.commons.lang3.StringUtils;

public class UriUtility {
    public static String normalizeUri(String s) {
        String r = StringUtils.stripAccents(s);
        r = r.replace(" ", "_");
        r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
        return r;
    }
}
1
Marco Sulla

Ersetzen Sie alle Sonderzeichen durch

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

beispiel: Alle Vorkommen von * durch Leerzeichen ersetzen 

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

* Diese Anweisung kann jeweils nur einen Typ von Sonderzeichen ersetzen

0
krishna murthy

Sie können einfache reguläre Ausdrücke für Zeichenfolgen verwenden, um alle Sonderzeichen zu finden, oder Muster- und Matcherklassen zum Suchen/Ändern/Löschen von benutzerdefinierten Zeichenfolgen. 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

0
Madhu Nandan

Verwenden Sie für Leerzeichen "[^ a-z A-Z 0-9]" dieses Muster

0
Muhammad Ahsan

Sie können den Unicode-Code für dieses Junk-Zeichen mit dem Zeichenkennungstool im Fenster pc abrufen und\u.\u00a9 für das Copyright-Symbol . Jetzt können Sie diese Zeichenfolge mit diesem Junk-Zeichen verwenden. Entfernen Sie keine Junk-Zeichen, sondern ersetzen Sie sie durch richtigen Unicode.

0
Mundroid