it-swarm.com.de

Wie entferne ich Sonderzeichen aus einem String?

Ich möchte Sonderzeichen entfernen wie:

- + ^ . : ,

von einem String mit Java.

70
Sameek Mishra

Das hängt davon ab, was Sie als Sonderzeichen definieren, aber versuchen Sie es mit replaceAll(...):

String result = yourString.replaceAll("[-+.^:,]","");

Beachten Sie, dass das Zeichen ^ nicht das erste Zeichen in der Liste sein darf, da Sie es entweder entgehen müssen oder es würde "alle außer diesen Zeichen" bedeuten.

Noch ein Hinweis: Das Zeichen - muss das erste oder das letzte Zeichen in der Liste sein, andernfalls müssten Sie es umgehen oder es würde einen Bereich definieren (zB :-, bedeutet "alle Zeichen in der Bereich : bis ,).

Um die Konsistenz zu erhalten und nicht von der Zeichenpositionierung abhängig zu sein, möchten Sie möglicherweise alle Zeichen, die in regulären Ausdrücken eine besondere Bedeutung haben, mit einem Escape-Zeichen versehen (die folgende Liste ist nicht vollständig. Achten Sie daher auf andere Zeichen wie ( , {, $ usw.):

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");


Wenn Sie alle Satzzeichen und Symbole loswerden möchten, probieren Sie diesen Regex: \p{P}\p{S} (Denken Sie daran, dass Sie in Java-Strings die umgekehrten Schrägstriche umgehen müssen: "\\p{P}\\p{S}").

Ein dritter Weg könnte so aussehen, wenn Sie genau definieren können, was in Ihrer Zeichenfolge verbleiben soll:

String  result = yourString.replaceAll("[^\\w\\s]","");

Das bedeutet: Ersetzen Sie alles, was kein Word-Zeichen ist (in jedem Fall a-z, 0-9 oder _) oder Leerzeichen.

Bearbeiten: Bitte beachten Sie, dass es einige andere Muster gibt, die sich als hilfreich erweisen könnten. Ich kann sie jedoch nicht alle erklären. Schauen Sie sich den Referenzabschnitt von regular-expressions.info an.

Eine weniger einschränkende Alternative zum Ansatz "zulässige Zeichen definieren", wie von Ray vorgeschlagen:

String  result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");

Der Regex passt zu allem, was kein Buchstabe in irgendeiner Sprache ist, und nicht als Trennzeichen (Leerzeichen, Zeilenumbruch usw.). Beachten Sie, dass Sie [\P{L}\P{Z}] (Großbuchstabe P bedeutet, diese Eigenschaft nicht zu haben) nicht verwenden kann, da dies "alles bedeuten würde, was kein Buchstabe ist oder kein Leerraum", was fast alles entspricht, da Buchstaben kein Leerzeichen und sind und umgekehrt.

Zusätzliche Informationen zu Unicode

Einige Unicode-Zeichen scheinen Probleme zu verursachen, da sie unterschiedlich codiert werden können (als einzelner Codepunkt oder als Kombination von Codepunkten). Weitere Informationen finden Sie unter regular-expressions.info .

224
Thomas

Wie hier beschrieben http://developer.Android.com/reference/Java/util/regex/Pattern.html

Muster sind reguläre Ausdrücke. In vielen Fällen sind Bequemlichkeitsmethoden wie String.matches, String.replaceAll und String.split vorzuziehen, aber wenn Sie mit demselben regulären Ausdruck viel Arbeit erledigen müssen, ist es möglicherweise effizienter, ihn einmal zu kompilieren und wiederzuverwenden. Die Pattern-Klasse und ihr Begleiter Matcher bieten auch mehr Funktionen als die geringe Menge, die String zur Verfügung stellt.

public class RegularExpressionTest {

public static void main(String[] args) {
    System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
    System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}

 public static String getOnlyDigits(String s) {
    Pattern pattern = Pattern.compile("[^0-9]");
    Matcher matcher = pattern.matcher(s);
    String number = matcher.replaceAll("");
    return number;
 }
 public static String getOnlyStrings(String s) {
    Pattern pattern = Pattern.compile("[^a-z A-Z]");
    Matcher matcher = pattern.matcher(s);
    String number = matcher.replaceAll("");
    return number;
 }
}

Ergebnis

String is = one
Number is = 9196390097
16
turbandroid

Versuchen Sie die replaceAll()-Methode der String-Klasse.

Übrigens ist hier die Methode, der Rückgabetyp und die Parameter.

public String replaceAll(String regex,
                         String replacement)

Beispiel:

String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");

Es sollte alle {'^', '+', '-'} Zeichen entfernen, die Sie entfernen wollten!

14
omt66

Dadurch werden alle Zeichen außer alphanumerisch ersetzt 

replaceAll("[^A-Za-z0-9]","");
10
Stephen

Sonderzeichen entfernen

String t2 = "[email protected]#$%^&*()-';,./?><+abdd";

t2 = t2.replaceAll("\\W+","");

Die Ausgabe wird sein: abdd.

Das funktioniert perfekt.

3
Akila

Verwenden Sie die String.replaceAll()-Methode in Java. replaceAll sollte für Ihr Problem gut genug sein.

2
MT.

Sie können einzelne Zeichen wie folgt entfernen:

String str="+919595354336";

 String result = str.replaceAll("\\\\+","");

 System.out.println(result);

AUSGABE:

919595354336
1
Satya

Wenn Sie nur ein Literal in Java ersetzen möchten, verwenden Sie Pattern.quote(string), um einen beliebigen String in ein Literal zu konvertieren.

myString.replaceAll(Pattern.quote(matchingStr), replacementStr)
0
Tezra