Java在String的末尾替换New Lines,Commas和Spaces

时间:2014-03-12 00:53:32

标签: java regex

我正在使用

mString.replaceAll("[\n,\\s]$", "");

不工作,如果可以按任何顺序出现,从字符串末尾删除换行符或空格的正确方法是什么。

4 个答案:

答案 0 :(得分:3)

试试这个

mString = mString.replaceAll("[\n,\\s]+$", "");

答案 1 :(得分:2)

您可以取出\n,因为\s也包含新行。您还需要添加+量词,以使其在结尾处匹配多于1个空格或逗号。

mString = mString.replaceAll("[,\\s]+$", "");

答案 2 :(得分:2)

您的尝试有两个原因

mString.replaceAll("[\n,\\s]$", "");

不起作用。首先,replaceAll不会修改String实例,因为String是不可变的。它返回修改后的字符串作为方法的结果。但上述声明丢弃了结果。所以你至少需要

mString = mString.replaceAll(...);

第二个原因是替换方法按顺序查找模式。如果它在每次替换后在字符串的开头重新开始,那么你的表达式将替换字符串末尾的换行符,逗号或空格,然后它会继续执行它,直到最后没有更多这样的字符。但它并没有这样做(如果确实如此,那么编写无限循环的replaceAll表达式就太容易了)。 replaceAll的工作方式如下:它搜索模式,如果找到模式,则会将之前的所有字符复制到结果中。然后,它将替换字符串复制到结果中。 然后,它会在 匹配之后将匹配器重置为角色 。在您的情况下,由于模式匹配到达输入的末尾(因为$),匹配后的字符将是字符串的结尾,并且不能再有匹配。因此,匹配器只能替换一个字符。这就是为什么你需要在模式中添加+的原因,就像Anubhava的其他正确答案一样:

mString = mString.replaceAll("[,\\s]+$", "");

答案 3 :(得分:0)

尝试mString = mString.replaceAll("(\\n|,|\\s)+$", "");