当前位置: 首页 > 面试题库 >

替换字符串中的反向引用语法(为什么要用美元符号?)

李泓
2023-03-14
问题内容

在Java中,它似乎在少数其他语言,在模式的反向引用由一个反斜杠(如前面\1\2\3,等),但在替换字符串他们前面加一个美元符号(例如$1$2$3,和也$0)。

这是一个片段说明:

System.out.println(
    "left-right".replaceAll("(.*)-(.*)", "\\2-\\1") // WRONG!!!
); // prints "2-1"

System.out.println(
    "left-right".replaceAll("(.*)-(.*)", "$2-$1")   // CORRECT!
); // prints "right-left"

System.out.println(
    "You want million dollar?!?".replaceAll("(\\w*) dollar", "US\\$ $1")
); // prints "You want US$ million?!?"

System.out.println(
    "You want million dollar?!?".replaceAll("(\\w*) dollar", "US$ \\1")
); // throws IllegalArgumentException: Illegal group reference

问题:

  • $Java特有的替换字符串中使用for反向引用吗?如果没有,用什么语言开始的?什么口味使用它,什么不使用?
  • 为什么这是个好主意?为什么不坚持相同的模式语法?那会不会导致语言的衔接性和易学性?
    • 如果上面的语句1和4是“正确的”而不是2和3,语法是否会更加简化?

问题答案:

使用$作为Java特有的替换字符串中的反向引用吗?

不。Perl使用它,Perl肯定早于Java的Pattern类。Java的regex支持是用Perl regexes明确描述的。

例如:http :
//perldoc.perl.org/perlrequick.html#Search-and-
replace

为什么这是个好主意?

好吧,显然您认为这不是一个好主意!但是,这是一个好主意的原因之一是使Java搜索/替换支持(更多)与Perl兼容。

还有另一个 可能的 原因,为什么它$可能被视为比更好的选择\。那就是\必须以\\Java String文字形式编写。

但是,所有这些都是纯粹的猜测。做出设计决定时,我们没人在房间里。最终,他们以这种方式设计替换String语法并不重要。这些决定已经制定并具体确定,任何进一步的讨论都是纯学术性的……除非您碰巧正在为Java设计一种新的语言或新的正则表达式库。



 类似资料:
  • 问题内容: 我想分割一个具有如下内容的字符串: 但是当我使用时: 它不能识别$并且不分割字符串,但是当我用$像X这样的字母替换$时,它可以工作。有人有什么主意吗? 问题答案: split函数需要一个正则表达式(而不是字符串)进行匹配。您的正则表达式使用特殊字符-在本例中为’$’-因此您需要对其进行更改以转义该字符: 还要注意,split返回一个字符串数组- 字符串是不可变的,因此无法修改。对Str

  • 我已经尝试遍历字符串并手动替换它们,但计数是关闭的。我也尝试过使用列表、数组、stringbuilder等,但我无法使其工作: 我觉得必须有一种简单的方法来用子字符串替换字符串中的单个字符,而不必进行所有这些迭代。我说错了吗?

  • 问题内容: 我试图遍历一个字符数组,并将字符串中的该字符替换为另一个数组中的并行字符。 这是我得到的例子: 它总是输出相同的字符串,没有替换。 我也尝试使用: 和replaceAll方法。 有什么建议? 问题答案: 字符串在Java中是不可变的。不会 更改 您调用它的字符串-它会 返回 更改后的新字符串。所以你要: (对于要在其上“显示”更改的 所有 方法,这都是不变的,因此也是如此。)

  • 问题内容: 这让我发疯了,所以请您帮忙… 我有一个Java字符串,我想用单引号替换所有反斜杠双引号序列,即使我逃避了我认为必要的替换命令,该命令也不会对字符串产生任何影响。 感谢任何建议。 谢谢。 问题答案: 在Java中,字符串是不可变的。您对字符串执行的任何操作都会产生新的对象。操作后,您需要重新分配值。以下内容可能会对您有所帮助。

  • 问题内容: 我正在尝试像在此网页中那样使用printf语句在Java中进行格式化:单击此处。但是我只是不知道$符号的目的是什么。有人可以向我解释一下吗? 输入: 预期的输出:(应该有一个空格而不是_) 我的代码: 问题答案: 这是 参数索引 。您可以阅读文档。我将尝试为您解释教程中的字符串: 通常,格式为。 在我们的示例中,指向语句中的位置。我们有3个字符串格式化,因此为什么我们的格式化字符串有,