replace(CharSequence target, CharSequence replacement)
Wie kann ich mithilfe der Methode in String die Groß- und Kleinschreibung des Ziels nicht berücksichtigen?
Zum Beispiel, wie es jetzt funktioniert:
String target = "FooBar";
target.replace("Foo", "") // would return "Bar"
String target = "fooBar";
target.replace("Foo", "") // would return "fooBar"
Wie kann ich dafür sorgen, dass das Ersetzen (oder wenn es eine geeignetere Methode gibt) die Groß- und Kleinschreibung nicht berücksichtigt, sodass beide Beispiele "Bar" zurückgeben?
target.replaceAll("(?i)"+Pattern.quote("foo"), "");
Wenn Sie sich nicht für case interessieren, ist es Ihnen vielleicht egal, ob alle Groß- und Kleinschreibung zurückgegeben werden:
quelle
Vielleicht nicht so elegant wie andere Ansätze, aber es ist ziemlich solide und leicht zu befolgen, insb. für Leute, die neu in Java sind. Eine Sache, die mich an der String-Klasse interessiert, ist folgende: Es gibt sie schon sehr lange und obwohl sie ein globales Ersetzen durch regulären Ausdruck und ein globales Ersetzen durch Strings (über CharSequences) unterstützt, hat das letzte keinen einfachen booleschen Parameter : 'isCaseInsensitive'. Wirklich, Sie hätten gedacht, dass durch das Hinzufügen dieses einen kleinen Schalters all die Probleme, die seine Abwesenheit insbesondere für Anfänger verursacht, hätten vermieden werden können. Jetzt auf JDK 7 unterstützt String diese eine kleine Ergänzung immer noch nicht!
Na ja, ich werde aufhören zu greifen. Für alle, die besonders neu in Java sind, ist hier Ihr Deus ex machina zum Ausschneiden und Einfügen . Wie gesagt, nicht so elegant und bringt Ihnen keine tollen Codierungspreise ein, aber es funktioniert und ist zuverlässig. Bei Kommentaren können Sie gerne einen Beitrag leisten. (Ja, ich weiß, StringBuffer ist wahrscheinlich die bessere Wahl für die Verwaltung der Mutationslinien mit zwei Zeichenfolgen, aber es ist einfach genug, die Techniken auszutauschen.)
quelle
Reguläre Ausdrücke sind recht komplex zu verwalten, da einige Zeichen reserviert sind:
"foo.bar".replaceAll(".")
Erzeugt beispielsweise eine leere Zeichenfolge, da der Punkt "alles" bedeutet. Wenn Sie nur den Punkt ersetzen möchten, sollte er als Parameter angegeben werden"\\."
.Eine einfachere Lösung besteht darin, StringBuilder-Objekte zum Suchen und Ersetzen von Text zu verwenden. Es dauert zwei: eine, die den Text in Kleinbuchstaben enthält, während die zweite die Originalversion enthält. Die Suche wird für den Inhalt in Kleinbuchstaben durchgeführt, und der erkannte Index ersetzt auch den Originaltext.
quelle
Für Nicht-Unicode-Zeichen:
quelle
org.apache.commons.lang3.StringUtils:
public static String replaceIgnoreCase (String-Text, String searchString, String-Ersatz)
Groß- und Kleinschreibung wird unabhängig voneinander durch alle Vorkommen eines Strings in einem anderen String ersetzt.
quelle
Ich mag die Antwort von smas , die mit einem regulären Ausdruck verwendet wird. Wenn Sie den gleichen Ersatz mehrmals durchführen, ist es sinnvoll, den regulären Ausdruck einmal vorkompilieren:
replaceAll
quelle
Machen Sie es sich einfach ohne Bibliotheken von Drittanbietern:
quelle