用java regex替换花括号之间的特定文本

时间:2014-12-09 07:13:38

标签: java regex string replace replaceall

我需要将{0}替换为“D1”,将{1}替换为“X0”,将{2}替换为“DP12001”等等... 我试着用正则表达式编写,就像这样。

    String header = "{0}^{1}^{2}^{3}^{4}^{5}^{6}^{7}^{8}^{9}^{10}";
    String _header = "";
    String rl = "D1,X0,DP12001,1,2,10021521012,1,141128135639,1,12,0";
    logger.debug("rl-->{}", rl);
    String[] parts = rl.split(",");
    int partCount = 0;
    for (String part : parts) {
        _header = header.replaceAll("\\{." + partCount + "\\}", part);
        partCount++;
    }

我需要像这样的最终输出。 “D1 ^ X0 ^ DP12001 ^ 1 ^ 2 ^ 10021521012 ^ 1 ^ 141128135639 ^ 1 ^ 12 ^ 0”

但我的代码没有按预期工作。

2 个答案:

答案 0 :(得分:4)

您可以在此处使用MessageFormat

String header = "{0}^{1}^{2}^{3}^{4}^{5}^{6}^{7}^{8}^{9}^{10}";
String rl = "D1,X0,DP12001,1,2,10021521012,1,141128135639,1,12,0";
String[] parts = rl.split(",");
System.out.println(MessageFormat.format(header, parts));

live demo

答案 1 :(得分:0)

首先,您需要记住replaceAll()replace会返回结果字符串。

既然你在做 _header = header.replaceAll("\\{." + partCount + "\\}", part);,旧的header在每个循环中反复使用。

其次,我认为你可以在这种情况下使用replace,如下所示:

String header = "{0}^{1}^{2}^{3}^{4}^{5}^{6}^{7}^{8}^{9}^{10}";
String _header = header;
String rl = "D1,X0,DP12001,1,2,10021521012,1,141128135639,1,12,0";
String[] parts = rl.split(",");
int partCount = 0;
for (String part : parts) {
  _header = _header.replace("{" + partCount + "}", part);
  partCount++;
}
System.out.println(_header);