2017-03-17 73 views
2

我有一個這樣的字符串:如何有效地替換字符串中的字符

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

我想從字符串中刪除這兩個方括號(用空字符串替換它們)。我試過這樣:

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

有沒有比這更有效的方法?

+1

什麼地方錯了你目前的解決方案?儘管如此,你可以縮小到一行。 –

+0

這看起來像是空字符串而不是'null' - 請澄清。 'X =線路。replaceAll(「^ \\ [| \\] $」,「」)'。 –

+1

你的括號總是在字符串的開頭和末尾嗎?他們總是在場嗎? –

回答

2

您可以使用.replaceAll如果要使用正則表達式同時字符串內的任意位置刪除這兩個[](實際上,OP兩個線路代碼段的等價物):

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

[\]\[]+模式匹配一​​個或多個(+[]字符(這些字符必須在[....]字符類中轉義)。

Java demo

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

字符串是不可變的,以便可以

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

另一個更有效的方式是使用正則表達式與兩個[]

像圖案

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

謝謝你的回答。 –

+0

不客氣! –

0

另一種方式:

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

如果您希望保留之間進來的方括號,那麼你可以使用:

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

輸出

x1,[x2],x3 
1

如果括號總是目前,始終在開始和如示例所示的字符串的結尾,你可以用substring

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

如果括號內只能出現在開始和字符串,最快的方法結束(就性能而言)將使用substring,它不涉及正則表達式。

如果括號保證是存在:

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

如果括號是可選的:

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