为什么在replaceAll(“ \\ s + $”,“”).split(“”)中需要“ $”?

时间:2019-05-28 06:18:58

标签: java

$sourcePath | Foreach-Object { Copy-item $_ "C:\temp" -Verbose } 在reg exp $中的意义是什么?
输入是用空格分隔的整数,例如:

"\\s+$"

代码是关于从一行中读取值的:

17 28 30

如果我从reg exp中删除了List<Integer> a = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" ")) .map(Integer::parseInt) .collect(toList()); ,则所有测试用例都将失败。

3 个答案:

答案 0 :(得分:2)

在正则表达式中,$表示“输入结束”,因此:

  • $一起使用,您正在从行中删除 trailing 空格。
  • 使用 out $,您将从行中删除 all 空格(因此您最终得到"172830"

我会改用它:

.trim()

这更易于编码和理解。

答案 1 :(得分:0)

$美元符号是字符串末尾的锚点。
例如:“ b $”与行尾的“ b”匹配。

答案 2 :(得分:0)

美元符号($)与字符串的结尾匹配。该代码的作用是,首先删除字符串结尾之前的所有空格字符(\t\n\x0B\f\r),然后在找到空格时将字符串拆分以分隔数值,然后将其解析为整数。如果您从正则表达式中删除$,代码将删除原始字符串中的所有空格,并且拆分将仅返回一个字符串,并为您提供单个数字。

在JavaDocs中查看正则表达式文档,以了解Java支持/实现的其他结构:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html