Java:理解 String replaceAll() 方法

Posted

技术标签:

【中文标题】Java:理解 String replaceAll() 方法【英文标题】:Java: Understanding the String replaceAll() method 【发布时间】:2011-07-08 13:07:04 【问题描述】:

我希望在这里找到这个问题的答案。

首先,

blah[abc] = blah[abc].replaceAll("(.*) (.*)", "$2, $1");

谁能解释一下 (.*)、$2 和 $1 是什么?

其次,当我将它嵌套在 for 语句中以反转字符串的两个部分时,我会遇到异常错误。我想知道是否有人知道这是为什么。

谢谢

编辑:这是我收到的错误

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 在 ChangeNames.main(ChangeNames.java:21)

【问题讨论】:

【参考方案1】:

(.*) - 将是匹配任意数量字符的模式。括号会将其标记为子模式(用于反向引用)。

$2 & $1 - 是反向引用。这些将是您的第二个和第一个子模式中匹配的内容。

基本上 replaceAll("(.) (.)", "$2, $1") 会查找由空格分隔的字符,然后在空格前添加逗号,除了翻转部分.例如:

a b => b, a
Hello world => Hellw, oorld

不确定嵌套...您可以发布您正在运行的代码吗?

【讨论】:

【参考方案2】:

您的正则表达式“(.)(.)”将是这样的:“(x)(y)”这将被“$2,$1”替换。

【讨论】:

以上是关于Java:理解 String replaceAll() 方法的主要内容,如果未能解决你的问题,请参考以下文章

Java String.replaceAll()方法

Java-String的replaceAll()方法(力扣20题相关)

Java String ReplaceAll 方法给出非法重复错误?

Java String.replaceAll() 与后向引用(backreference)

JAVA中appendReplacement()方法和replaceAll()方法有啥区别。。

String replace() 和 replaceAll() 的区别