如何理解像这样的代码pKataLengkap.replaceAll(“(。)\\ 1+”,“$ 1”)

时间:2016-04-14 04:48:45

标签: java string

任何人都可以在此

下描述代码的含义
pKataLengkap.replaceAll("(.)\\1+", "$1")

我不明白,我从link from code fight获得了一些参考 谢谢!

1 个答案:

答案 0 :(得分:4)

replaceAll替换正则表达式(regexes)。如果您对正则表达式一无所知,请阅读this tutorial。但是,这个特殊的正则表达式有点棘手,所以我将解释它。正则表达式是(.)\1+(反斜杠必须在字符串文字中加倍,但正则表达式只有一个反斜杠)。

第一个.匹配任何单个字符。由于它在括号中,匹配器将其视为捕获组&#34 ;;因为它是正则表达式中的第一个组,所以它捕获组1和#34;当找到匹配时(即当匹配器找到任何单个字符时),该匹配的文本将是捕获组。因此,"捕获组1"是那个角色。

下一部分是\1++是一个量词意义" +中跟随"中的一个或多个。 \1是一种特殊模式,意味着"捕获组1和#34;中的任何内容。所以这一切都意味着模式将匹配任何单个字符,后跟一个或多个相同字符的出现。也就是说,它将模式与两个或多个相同字符的匹配项匹配。

现在每个这样的模式都被"$1"取代。 $1replaceAll中是特殊的,它表示"捕获组1"的内容,它是匹配的单个字符。

所以基本上,只要匹配器看到两个或多个连续出现的相同字符,它就会用一个出现的那个字符替换它们。也就是说,它会将"xxxyyyyyyzzz"转换为"xyz"