Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用replaceAll从多行字符串中的每一行修剪尾部空白_Java_Regex - Fatal编程技术网

Java 使用replaceAll从多行字符串中的每一行修剪尾部空白

Java 使用replaceAll从多行字符串中的每一行修剪尾部空白,java,regex,Java,Regex,请解释为什么在这个表达式中,替换只在字符串末尾发生一次 "1 \n3 \n5 ".replaceAll(" +$", "x") // => "1 \n3 \n5x" 据报道,, $应与行的结尾匹配,\z应与输入(字符串)的结尾匹配 我的目标是替换字符串中每行末尾的尾随空格。“x”替换仅仅是更好地可视化被替换内容的一种方式 我认为正则表达式和String.replaceAll应该能够做到这一点。如果replaceAll无法执行此操作,请建议一个简明的替代方法。要替换每行的尾随空格

请解释为什么在这个表达式中,替换只在字符串末尾发生一次

"1  \n3  \n5  ".replaceAll(" +$", "x") // => "1  \n3  \n5x"
据报道,,
$
应与行的结尾匹配,
\z
应与输入(字符串)的结尾匹配

我的目标是替换字符串中每行末尾的尾随空格。
“x”
替换仅仅是更好地可视化被替换内容的一种方式


我认为正则表达式和String.replaceAll应该能够做到这一点。如果
replaceAll
无法执行此操作,请建议一个简明的替代方法。

要替换每行的尾随空格,需要使用
(?m)
(多行)修饰符

"1  \n3  \n5  ".replaceAll("(?m) +$", "x") //=> "1x\n3x\n5x"

注意:此修饰符使
^
$
在每行的开头和结尾匹配。

hwnd的答案确实是最简洁的方法。然而,特别是如果模式需要多次匹配,我想建议一种更快的替代方案。是的,这叫做预编译模式!(相反,
String#replaceAll
在每次调用时重新编译模式。)


是的,它看起来更笨重,这是因为Java没有regexp文本。我希望如此,但人们会想要JSON文本、XML文本(比如E4X)、XPath表达式文本、
printf
format string文本、SQL语句文本等,然后人们会问这种疯狂何时会停止。:-)

你不只是让人们要求这些,再加上regexp文本吗?;-)
private static final Pattern LINE_END_SPACES = Pattern.compile(" +$", Pattern.MULTILINE);

public static String stripLineEndSpaces(String str) {
    return LINE_END_SPACES.matcher(str).replaceAll("");
}