/ / Wie man effizient Zeichen in einem String ersetzt - Java, String

Wie man Zeichen in einem String effizient ersetzt - java, string

Ich habe eine Zeichenfolge wie folgt:

String line="[x1,x2,x3]";

Ich möchte beide eckigen Klammern aus der Zeichenfolge entfernen (durch eine leere Zeichenfolge ersetzen). Ich habe es so versucht:

 String x=line.replace("[","").replace("]","");

Gibt es einen effizienteren Weg als diesen?

Antworten:

2 für die Antwort № 1

String ist unveränderlich, so dass Sie können

String x = line.replace("[","").replace("]","");

Eine andere effizientere Methode ist die Verwendung von Regex mit einem Muster für beide [ und ]

mögen

String x = line.replaceAll("[\]\[]+", "");

2 für die Antwort № 2

Sie dürfen verwenden .replaceAll Wenn Sie einen regulären Ausdruck verwenden möchten, um beide zu entfernen [ und ] gleichzeitig irgendwo in der Zeichenfolge (eigentlich das Äquivalent des OP-Zwei-Zeilen-Code-Snippets):

String x = line.replaceAll("[\]\[]+", "");

Das [][]+ Muster entspricht einem oder mehreren (+) [ oder ] Zeichen (diese müssen innen maskiert werden) [....], eine Zeichenklasse).

Java-Demo:

String line="[x1,x2,x3]";
String x = line.replaceAll("[\[\]]+", "");
System.out.println(x);
// => x1,x2,x3

1 für die Antwort № 3

Wenn die Klammern immer vorhanden sind und immer am Anfang und Ende der Zeichenfolge, wie im Beispiel gezeigt, können Sie einfach verwenden substring:

String x2 = line.substring(1, line.length()-1);

0 für die Antwort № 4

Ein anderer Weg:

line = line.substring(1, line.length()-1);

Wenn Sie die eckigen Klammern beibehalten möchten, die dazwischen stehen, können Sie Folgendes verwenden:

String line="[x1,[x2],x3]";
line = line.replaceAll("^\[(.*)\]$", "$1");

Ausgabe

x1,[x2],x3

0 für die Antwort № 5

Wenn Klammern nur am Anfang und am Ende der Zeichenfolge angezeigt werden können, wird die schnellste Methode (in Bezug auf die Leistung) verwendet substring das beinhaltet keine regulären Ausdrücke.

Wenn Klammern garantiert vorhanden sind:

line = line.substring(1, line.length()-1);

Wenn Klammern optional sind:

int len = line.length();
int trimStart = (len > 0 && line.charAt(0) == "[") ? 1 : 0;
int trimEnd = (len > 0 && line.charAt(len-1) == "]") ? 1 : 0;
if (trimStart > 0 || trimEnd > 0) {
line = line.substring(trimStart, len - trimEnd);
}