用 X 替换每个下划线

Replace each underscore with a X

用例:

输入:“___Test_String”

输出:“XXXTest_String”

我想用 X 替换所有开始的下划线。 每个下划线的 catch 应该用相应的 X 替换。

条件:

字符串可以以下划线开头,也可以不以下划线开头。如果它不以下划线开头,它将保持原样。

我试过:

replaceAll("[_]","X")  = XXXTestXString - It replaced all the underscores.
replaceAll("^[_]+","X") = XTestXString - Replaced all the starting underscores with a single X.
replaceFirst("_","X") = X__Test_String - Just replaced the first underscore.

我知道使用非正则表达式的方式很容易实现,但如果可能的话我想要一个正则表达式的解决方案。

如有任何帮助,我们将不胜感激。

您可以使用 replaceAll("\G_", "X")

\G 匹配器的意思是“上一个匹配的结束”,这当然意味着第一个匹配上的“输入的开始”。请参阅 Pattern. See also Regular-Expressions.info.

的 javadoc

只要前一个匹配项后面紧跟一个下划线,正则表达式就会继续匹配。它将一次匹配一个下划线,因此每个下划线都单独替换为 X.

一旦找到第一个非下划线,则匹配结束,因此tS之间嵌入的下划线将不会被匹配。