【问题标题】:replace substring from string in java从java中的字符串替换子字符串
【发布时间】:2023-03-25 16:01:01
【问题描述】:

我有字符串 hello Mr $name ur score is $value,获取 $name 和 $value 部分的最佳方法是什么?

String json = "{\n" + "\"id\": 1,\n" + "\"data\":[\n" + "{\n"
            + "\"to\":123456789,\"name\":\"james\",\"value\":200\n" + "},\n" + "{\n"
            + "\"to\":123456789,\"name\":\"jhon\",\"value\":20\n" + "}]\n" + "}\n" + "";

Object obj = new JSONParser().parse(json);
            JSONObject jsonObject = (JSONObject) obj;
            long id = (long) jsonObject.get("id");
            JSONArray arrayOfdata = (JSONArray) jsonObject.get("data");
            JSONObject dataObject = new JSONObject();
            ArrayList<String> data = new ArrayList<>();
            for (String w : words) {
                if (w.contains("$"))
                    if (json.contains(w.substring(1))) {
                        data.add(w.substring(1));
                    }
            }
            for (int n = 0; n < arrayOfdata.size(); n++) {
                dataObject = (JSONObject) arrayOfdata.get(n);
                for (int j = 0; j < data.size(); j++) {
                    String msg = message.replace(data.get(j).toString(), dataObject.get(data.get(j)).toString());
                    String strNew = msg.replace("$", "");
                    logger.info("strNew " + strNew);
                }
            }

Result

【问题讨论】:

  • 你的问题不清楚。请改写您的问题。
  • 您的要求是什么。你的问题不清楚。您在发布的代码中遗漏了一些东西。请说清楚。
  • 不清楚你需要什么

标签: java json string


【解决方案1】:
public static void main(String...strings) {     
    String inputString = "{\n" + "\"id\": 1,\n" + "\"data\":[\n" + "{\n" + "\"to\":123456789,\"name\":\"james\",\"value\":200\n" + "},\n" + "{\n" + "\"to\":123456789,\"name\":\"jhon\",\"value\":20\n" + "}]\n" + "}\n" + "";
    Pattern pattern = Pattern.compile("(?:\"name\":\")(.*?)(?:\"value\":)[0-9]*");
    Matcher m = pattern.matcher(inputString);

    while (m.find()) {
        String[] matches = m.group().split(",");
        String name = null, value = null;
        for (String match : matches) {
            if(match.contains("name")){
                name= match.substring(match.indexOf("name")+"name".length()).replaceAll("\"", "");
            }else if(match.contains("value")) {
                value= match.substring(match.indexOf("value")+"value".length()).replaceAll("\"", "");
            }
        }
        System.out.println("Bonjour Mr. "+name+" votre score est value "+value);
    }       
}

【讨论】:

  • 这是一个很好的答案,但是当 json 的写法不同时,您的正则表达式将不起作用,在这里您假设 name 和 value 总是像示例中一样,您可能有 name,sthElse, value 。 ..
  • @мυѕτавєւмo 我已经根据您提到的要求更新了我的答案,即使名称和值之间存在一些键值对 JSON 数据,这也有效
  • @the hoss 请你看看提供的答案,看看它是否符合你的目的
【解决方案2】:

我有点理解你的代码的目的,这里尝试获取 json 数组中的每个条目,每个条目的名称和值,我希望它有所帮助。

String json = "{\n" + "\"id\": 1,\n" + "\"data\":[\n" + "{\n"
            + "\"to\":123456789,\"name\":\"james\",\"value\":200\n" + "},\n" + "{\n"
            + "\"to\":123456789,\"name\":\"jhon\",\"value\":20\n" + "}]\n" + "}\n" + "";

    JSONObject jsonObject = new JSONObject(json);
    JSONArray arrayOfdata = (JSONArray) jsonObject.get("data");

    String message = "hello Mr %s your score is %s";

    for (int i = 0; i < arrayOfdata.length(); i++) {
        JSONObject obj = arrayOfdata.getJSONObject(i);
        Object name = obj.get("name");
        Object value = obj.get("value");

        System.out.printf(message, name, value);
        System.out.println();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2012-04-03
    • 2013-07-23
    • 2015-05-31
    相关资源
    最近更新 更多