【问题标题】:Java: is "$1" a placeholder? [duplicate]Java:“$1”是占位符吗? [复制]
【发布时间】:2021-12-28 06:32:50
【问题描述】:

我得到了一个 Java 练习:
将camelCase写作分解成单词,例如输入“camelCaseTest”应该给出输出“camel Case Test”。

我在网上找到了这个解决方案,但我不明白它的全部

public static String camelCaseBetter(String input) {
    input = input.replaceAll("([A-Z])", " $1");
    return input;
}

$1 有什么作用?我认为它只需要将要替换的字符串(A-Z)并将其替换为自身(在这种情况下,该方法还附加了一个空格来分解单词)

我找不到对$1 的好的解释,所以我希望这里有人可以解释它或分享一个指向可以解释它的正确资源的链接。

【问题讨论】:

  • input "camelCaseTest" should give the output "camelCaseTest" - 这个例子似乎被打破了,因为输入和输出之间没有区别。你的意思是输出应该是“骆驼案例测试”吗?
  • $1 是第一个 (...),$2 第二个等等。 $0 是模式的所有匹配项。
  • @Thomas:我已经编辑了问题来解决这个问题(加上一些小错别字)
  • @Mritunjay 这很相似而且很有帮助,谢谢。它是关于 JavaScript 的,所以我不会称它为完全重复。

标签: java placeholder replaceall


【解决方案1】:

来自documentation of the String class

请注意,替换字符串中的反斜杠 (\) 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll

来自Matcher.replaceAll

替换字符串可能包含对捕获的子序列的引用,如appendReplacement 方法中一样。

然后appendReplacement method

替换字符串可能包含对上一次匹配期间捕获的子序列的引用:${name}$g 的每次出现都将分别由对应的 group(name)group(g) 的评估结果替换。对于$g,$ 之后的第一个数字始终被视为组引用的一部分。如果后续编号将形成合法的组引用,则将其并入g。只有数字“0”到“9”被认为是组参考的潜在组成部分。例如,如果第二组匹配字符串“foo”,则传递替换字符串“$2bar”将导致“foobar”附加到字符串缓冲区。美元符号 ($) 可以作为文字包含在替换字符串中,方法是在其前面加上反斜杠 (\$)。

因此,$1 将引用第一个捕获组(与正则表达式第一个括号内的模式匹配的任何内容)。

([A-Z]) 将匹配任何大写字符并将其放在第一个捕获组中。 $1 然后将其替换为空格,后跟匹配的大写字符。

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2015-10-04
    • 2021-03-04
    • 1970-01-01
    • 2020-04-09
    • 2013-11-12
    • 1970-01-01
    • 2011-07-11
    • 2014-11-01
    相关资源
    最近更新 更多