/ / Jak skutecznie zastąpić znaki w łańcuchu - java, string

Jak skutecznie zastąpić znaki w łańcuchu - java, ciąg

Mam ciąg jak poniżej:

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

Chcę usunąć oba nawiasy kwadratowe z ciągu (zastąp je pustym łańcuchem). Próbowałem tego w ten sposób:

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

Czy istnieje skuteczniejszy sposób niż ten?

Odpowiedzi:

2 dla odpowiedzi № 1

Ciąg jest niezmienny, więc możesz

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

innym bardziej skutecznym sposobem jest użycie wyrażenia regularnego z wzorcem dla obu [ i ]

lubić

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

2 dla odpowiedzi nr 2

Możesz użyć .replaceAll jeśli chcesz użyć wyrażenia regularnego, aby usunąć oba [ i ] w tym samym czasie w dowolnym miejscu łańcucha (właściwie odpowiednik fragmentu kodu OP dwóch linii):

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

The [][]+ wzór pasuje do jednego lub więcej (+) [ lub ] postacie (muszą być ucieknięte do środka) [....], klasa postaci).

Demo Java:

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

1 dla odpowiedzi nr 3

Jeśli nawiasy są zawsze obecne i zawsze na początku i końcu łańcucha, jak pokazano w przykładzie, możesz po prostu użyć substring:

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

0 dla odpowiedzi nr 4

Inny sposób:

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

Jeśli chcesz zachować nawiasy kwadratowe, które przychodzą pomiędzy, możesz użyć:

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

Wydajność

x1,[x2],x3

0 dla odpowiedzi № 5

Jeśli nawiasy mogą pojawić się tylko na początku i na końcu łańcucha, najszybszą metodą (pod względem wydajności) byłoby użycie substring który nie obejmuje wyrażeń regularnych.

Jeśli zagwarantowane są nawiasy:

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

Jeśli nawiasy są opcjonalne:

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