使用replaceAll()在java中进行字符串操作

时间:2012-04-25 19:59:49

标签: java regex

我有以下形式的字符串:

भन्‍‌ने [-0.4531954191090929, 0.7931147934270654, -0.3875088408737827, -0.09427394940704822, 0.10065554475134718, -0.22044284832864797, 0.3532556916833505, -1.8256229909222224, 0.8036832111904731, 0.3395868096795993]

如果 [ or ] or , char存在,我只想删除它们,我希望每个单词和float都用空格分隔。它是:

भन्‍‌ने -0.4531954191090929 0.7931147934270654 -0.3875088408737827 -0.09427394940704822 0.10065554475134718 -0.22044284832864797 0.3532556916833505 -1.8256229909222224 0.8036832111904731 0.3395868096795993

我将每个字符串表示为line。我做了以下事情:

line.replaceAll("([|]|,)$", " ");

但它对我不起作用。输入行没有任何变化。任何帮助都非常感谢。

4 个答案:

答案 0 :(得分:3)

字符串是不可变的。尝试

line = line.replaceAll("([|]|,)$", " ");

或者更加冗长,但避免使用正则表达式:

char subst = ' ';
line = line.replace('[', subst).replace(']', subst).replace(',', subst);

答案 1 :(得分:2)

在Java中,字符串是immutable,这意味着字符串的内容永远不会改变。所以,致电

line.replaceAll("([|]|,)$", " ");

不会更改line的内容,但会返回一个新字符串。您需要将方法调用的结果分配给变量。例如,如果您不关心原始line,则可以编写

line = line.replaceAll("([|]|,)$", " ");

获得你原先预期的效果。

答案 2 :(得分:1)

[]是正则表达式中的特殊字符。 replaceAll应该是一个正则表达式作为它的第一个输入,所以你必须转义它们。

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

无法告诉你原来的正则表达式尝试做什么,为什么你有$等等,需要了解你期待你做的事情。

答案 3 :(得分:1)

尝试

line = "asdf [foo, bar, baz]".replaceAll("(\\[|\\]|,)", "");

正则表达式语法使用[]来定义[a-z]之类的组,因此您必须屏蔽它们。