如何编写Java正则表达式通过String.replaceAll()替换行尾空格为单个点
解决方案
你可以直接使用正则表达式 *$实现需求,单次replaceAll调用即可完全满足所有测试用例:
String regex = " *$"; // 所有测试用例全部通过 assertEquals("foo.", "foo".replaceAll(regex, ".")); assertEquals("foo.", "foo ".replaceAll(regex, ".")); assertEquals("foo.", "foo ".replaceAll(regex, ".")); assertEquals(" foo.", " foo ".replaceAll(regex, "."));
原理解释
匹配普通的英文空格,*限定符表示匹配0个或多个前面的空格字符$是字符串末尾锚点,限定匹配范围必须是字符串的最后位置- 这个正则在整个字符串中只会有唯一一处匹配(末尾的空格序列,哪怕长度为0),因此
replaceAll和replaceFirst的执行效果完全一致,不会出现多余替换的问题。
如果需要同时匹配行尾的制表符、换行等所有空白字符,可以把正则替换为\\s*$即可。
内容的提问来源于stack exchange,提问作者ᴇʟᴇvᴀтᴇ
相关产品推荐
相关产品推荐

