Ich möchte Sonderzeichen entfernen wie:
- + ^ . : ,
aus einem String mit Java.
Ich möchte Sonderzeichen entfernen wie:
- + ^ . : ,
aus einem String mit Java.
replaceAll
entfernen Sie diese. Wenn Sie mehr esoterische Anforderungen haben, bearbeiten Sie die Frage. :)
replaceAll
für sie oder analysieren Sie weiter Fügen Sie der Zeichenfolge die Zeichen hinzu, die nicht die Zeichen sind, die Sie herausnehmen möchten, und führen Sie am Ende einfach ein + = für eine Zeichenfolge aus, die Sie zurückgeben möchten.
deleteChars.apply( fromString, "-+^.:," );
- finden Sie deleteChars hier
Antworten:
Das hängt davon ab, was Sie als Sonderzeichen definieren. Versuchen Sie jedoch Folgendes replaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
Beachten Sie, dass das ^
Zeichen nicht das erste in der Liste sein darf, da Sie es dann entweder maskieren müssten oder "alle außer diesen Zeichen" bedeuten würden.
Noch ein Hinweis: Das -
Zeichen muss das erste oder letzte in der Liste sein, sonst müssten Sie ihm entkommen oder es würde einen Bereich definieren (z. B. :-,
würde "alle Zeichen im Bereich :
bis " bedeuten ,
).
Also, um Konsistenz zu halten und nicht auf Zeichenpositionierung abhängen, können Sie alle diese Zeichen zu entkommen , die eine besondere Bedeutung in regulären Ausdrücken hat (die folgende Liste nicht vollständig ist, so bewusst sein , andere Zeichen wie (
, {
, $
etc.) ::
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Wenn Sie alle Satzzeichen und Symbole entfernen möchten, versuchen Sie diesen regulären Ausdruck: \p{P}\p{S}
( Beachten Sie , dass Sie in Java-Zeichenfolgen Schrägstriche vermeiden müssen :) "\\p{P}\\p{S}"
.
Ein dritter Weg könnte so etwas sein, wenn Sie genau definieren können, was in Ihrer Zeichenfolge verbleiben soll:
String result = yourString.replaceAll("[^\\w\\s]","");
Dies bedeutet: Ersetzen Sie alles, was kein Wortzeichen (az auf jeden Fall 0-9 oder _) oder Leerzeichen ist.
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 daher den Referenzabschnitt von regulär-expressions.info an .
Hier ist eine weniger restriktive Alternative zum Ansatz "Zulässige Zeichen definieren", wie von Ray vorgeschlagen:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
Die Regex entspricht allem, was kein Buchstabe in einer Sprache und kein Trennzeichen ist (Leerzeichen, Zeilenumbruch usw.). Beachten Sie, dass Sie nicht verwenden können [\P{L}\P{Z}]
(Großbuchstabe P bedeutet, dass diese Eigenschaft nicht vorhanden ist), da dies "alles bedeutet, was kein Buchstabe oder kein Leerzeichen ist", was fast mit allem übereinstimmt, da Buchstaben keine Leerzeichen sind und umgekehrt.
Zusätzliche Informationen zu Unicode
Einige Unicode-Zeichen scheinen Probleme zu verursachen, da sie auf unterschiedliche Weise codiert werden können (als einzelner Codepunkt oder als Kombination von Codepunkten). Weitere Informationen finden Sie unter reguläre-expressions.info .
[\P{L}]
-
Zeichen das erste oder letzte in der Liste sein muss oder dass es maskiert werden muss.
[^\\p{L}\\p{Z}]
scheint auch deutsche Umlaute (ä, ö, ü) zu eliminieren (zumindest für mich: /), so dass "Der reguläre Ausdruck passt zu allem, was in keiner Sprache ein Buchstabe ist" nicht 100% korrekt zu sein scheint
String result = yourString.replaceAll("[^\w\s]","");
macht FehlerInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Dadurch werden alle Zeichen außer alphanumerisch ersetzt
replaceAll("[^A-Za-z0-9]","");
Wie hier beschrieben http://developer.android.com/reference/java/util/regex/Pattern.html
Muster sind regulierte Ausdrücke. In vielen Fällen Bequemlichkeit Methoden wie
String.matches
,String.replaceAll
undString.split
wird bevorzugt sein, aber wenn Sie eine Menge Arbeit mit dem gleichen regulären Ausdruck tun müssen, kann es effizienter sein , es einmal zu kompilieren und wiederverwenden. Die Pattern-Klasse und ihr Begleiter Matcher bieten außerdem mehr Funktionen als die geringe Menge, die String verfügbar macht.
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
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!
Sonderzeichen entfernen
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
Ausgabe wird sein: abdd.
Das funktioniert perfekt.
Verwenden Sie die String.replaceAll()
Methode in Java.
replaceAll sollte für Ihr Problem gut genug sein.
String
Klasse zu lesen ? Achten Sie insbesondere auf das Wort "Regex". Es gibt ein paar Methoden, und ein bisschen Nachdenken sollte Ihnen sagen, wie Sie vorgehen sollen ... :)