如何有效地替换String中的字符

时间:2017-03-17 07:53:00

标签: java string

我有一个这样的字符串:

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

我想从String中删除两个方括号(用空字符串替换它们)。我试过这样的话:

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

有比这更有效的方式吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

字符串是不可变的,所以你可以

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

另一种更有效的方法是使用带有 []

的模式的正则表达式

喜欢

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

答案 2 :(得分:1)

如果括号始终存在,并且始终位于字符串的开头和结尾,如示例所示,则可以使用substring

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

答案 3 :(得分:0)

另一种方式:

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

如果您想保留介于两者之间的方括号,则可以使用:

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

输出

x1,[x2],x3

答案 4 :(得分: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);
}