使用正则表达式单行替换字符串中的数字与特定字符的数量

时间:2017-02-27 08:17:05

标签: java regex string replace digit

是否可以使用正则表达式将字符串中的数字替换为'X'等特定字符的数量? (即用"test3something8"替换"testXXXsomethingXXXXXXXX")?

我知道我可以使用for-loop,但我正在寻找一种尽可能短的(正则表达式)单线解决方案(关于代码 - 高尔夫挑战 - 是的,我知道codegolf-SE,但这是一个普通的Java问题而不是代码高尔夫问题。)

  • 我知道如何用一个字符替换数字:
    String str = "test3something8".replaceAll("[1-9]", "X"); - > str = "testXsomethingX"
  • 我知道如何使用群组,以防您想要使用匹配,或者在每次匹配后添加内容而不是替换它:
    String str = "test3something8".replaceAll("([1-9])", "$1X"); - > str = "test3Xsomething8X"
  • 我知道如何创建n个特定字符的数量:
    int n = 5; String str = new String(new char[n]).replace('\0', 'X'); - > str = "XXXXX"
  • 或者像这样:
    int n = 5; String str = String.format("%1$"+n+"s", "").replace(' ', 'X'); - > str = "XXXXX";

我想要的是这样的事情(下面的代码显然不起作用,但它应该让我知道我想要实现什么 - 最好甚至更短):

String str = "test3Xsomething8X"
  .replaceAll("([1-9])", new String(new char[new Integer("$1")]).replace('\0', 'X')));
// Result I want it to have: str = "testXXXsomethingXXXXXXXX"

正如我所说,上面的内容并不起作用,因为" $ 1"应该直接使用,所以现在它给出了

  

java.lang.NumberFormatException:对于输入字符串:" $ 1"

TL; DR:是否有人知道使用某个字符的数量替换字符串中的数字?

1 个答案:

答案 0 :(得分:0)

如果你真的想把它作为一个班轮。可能的解决方案(更多地将其视为PoC)可能是使用Stream API。

testXXXsomethingXXXXXXXX

输出

{{1}}

注意尚未对性能,可扩展性,GC友好等进行调查。