Java Json String提取数字并替换特定文本

时间:2019-02-12 06:04:00

标签: java json regex

我在json中有一个文本文件,我想用数字NumberInt(x)替换x

在文本文件中,以json为记录/数据的字段为workYear: NumberInt(2010)

我想通过删除workYear: 2010NumberInt(将其替换为)NumberInt(x)位于文本文件中的任何位置,我想用其编号替换所有内容。

我可以搜索所有出现的情况,但是我不确定如何仅用数字值替换它。

String json = <json-file-content>

String sPattern = "NumberInt\\([0-9]+\\)";
Pattern pattern = Pattern.compile(sPattern);
Matcher matcher = pattern.matcher(json);

while (matcher.find()) {
    String s = matcher.group(0);
    int workYear = Integer.parseInt(s.replaceAll("[^0-9]", ""));
    System.out.println(workYear);
}

我想用数字值int NumberInt(x)字符串替换所有json,然后更新文本文件(json文件)。

谢谢!

2 个答案:

答案 0 :(得分:1)

以下内容应该有效。您需要捕获令牌。

    String json = "workYear:NumberInt(2010) workYear:NumberInt(2011)";
    String sPattern = "NumberInt\\(([0-9]+)\\)";
    Pattern pattern = Pattern.compile(sPattern);
    Matcher matcher = pattern.matcher(json);

    List<String> numbers = new ArrayList<>();
    while (matcher.find()) {
        String s = matcher.group(1);
        numbers.add(s);
    }
    for (String number: numbers) {

        json = json.replaceAll(String.format("NumberInt\\(%s\\)", number), number);
    }
    System.out.println(json);

答案 1 :(得分:1)

您可以使用StringBuilder构建输出,如下所示, 有关其工作原理的信息,请参见JavaDoc for appendReplacement

    String s = "workYear: NumberInt(2010)\nworkYear: NumberInt(2012)";
    String sPattern = "NumberInt\\([0-9]+\\)";
    Pattern pattern = Pattern.compile(sPattern);
    Matcher matcher = pattern.matcher(s);

    StringBuilder sb = new StringBuilder();

    while (matcher.find()) {
        String s2 = matcher.group(0);
        int workYear = Integer.parseInt(s2.replaceAll("[^0-9]", ""));
        matcher.appendReplacement(sb, String.valueOf(workYear));
    }
    matcher.appendTail(sb);

    String result = sb.toString();