我正在使用
mString.replaceAll("[\n,\\s]$", "");
不工作,如果可以按任何顺序出现,从字符串末尾删除换行符或空格的正确方法是什么。
答案 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)+$", "");