gpt4 book ai didi

java - 如何完全替换一个数字而不中间修改?

转载 作者:行者123 更新时间:2023-12-01 17:00:37 26 4
gpt4 key购买 nike

我有 oldIdnewId,我想用 newId 替换 oldId

public static void main(String[] args) {
String jsonString = "{\"user_id\":{\"long\":876},\"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";

// some other json strings -

// String jsonString = "{\"user_id\":{\"string\": \"876\"},\"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// String jsonString = "{\"user_id\": \"876\", \"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// String jsonString = "{\"user_id\": 876, \"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";
// String jsonString = "{\"user_id\": null, \"client_id\":{\"int\":0},\"affinity\":[{\"try\":{\"long\":55787693},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}";

String newResponse = changeJsonString(jsonString, "876", "54321");
System.out.println(newResponse);
}

private static String changeJsonString(String originalResponse, String oldId, String newId) {
return originalResponse.replaceAll(String.valueOf(oldId), String.valueOf(newId));
}

使用上面的代码,它会将 newResponse 打印为 -

{\"user_id\":{\"long\":54321},\"client_id\":{\"int\":0},\"affinity\":[{\"matter\":{\"long\":5575432193},\"scoring\":{\"float\":0.19}},{\"try\":{\"long\":1763},\"scoring\":{\"float\":0.0114}}]}    

如果你仔细观察,有两个字段发生了变化,一个是 user_id,第二个是 matter,因为 replaceAll 会将所有内容替换为新字段。

  • user_id 876 更改为 54321
  • 问题 55787693 已更改为 5575432193

我正在寻找的是 - 它应该只将完整的数字替换为新的数字,而不是将中间的任何数字修改为新的数字。例如 - user_id 876 是一个完整的数字,因此它应该仅将 876 替换为 54321 而不是事情其中876在中间。

一般来说,我想将一个号码完全替换为一个新号码。我不想在中间替换一些东西。有什么办法可以做到这一点吗?

最佳答案

正确的方法是将 JSON 数据作为 JSON 数据进行处理。

您使用的任何字符串替换或正则表达式都是脆弱的,并且可能会破坏某些输入 JSON 字符串的代码。例如,如果 user_idmatter 值相同怎么办?那么你不中间替换的假设就失败了。

处理 JSON 只需三行代码:

private static String changeJsonString(String originalResponse, String newId) {     
try {
JSONObject root = new JSONObject(originalResponse);
((JSONObject) root.get("user_id")).put("long", Long.parseLong(newId));
return root.toString();
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}

我假设您不需要 oldId 。如果您的输入字符串可能包含多个 user_id,您只需扩展我的示例即可检查并替换适当的 JSONObject

请注意,我正在使用 org.json.jar for Java来自www.json.org 。您可以随意使用任何您喜欢的 JSON 解析器。

<小时/>因为,您重新发布了这个问题,但在那里提供了完整的 JSON 字符串格式,所以我提出了这个解决方案 again但更新后可以处理 user_id 的所有可能的 JSON 数据类型。

关于java - 如何完全替换一个数字而不中间修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com