2017-03-17 44 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); 
}