这是一个有点难以取消了解你真正需要的东西。
从这个输入字符串:
{
ssid:"test1"
psk:"test154695"
key_mgmt:WPA-PSK
sim_slot:"-1"
imsi:"none"
priority:1
}
看来要得到这个输出字符串:
{
"ssid": "test1",
"psk": "test154695",
"key_mgmt": "WPA-PSK",
"sim_slot": "-1",
"imsi": "none",
"priority": 1
}
我看到的差异:
添加双引号键值,
添加双引号的key_mgmt值,转向WPA-PSK到"WPA-PSK"
添加一个空格后:
每个值后面添加一个逗号,除了最后一个
这里有一个实现,做到这一点,并验证。 我希望这是你正在寻找的, 或基于此你将能够弄清楚。
String malformed = "{\n" +
" ssid:\"test1\"\n" +
" psk:\"test154695\"\n" +
" key_mgmt:WPA-PSK\n" +
" sim_slot:\"-1\"\n" +
" imsi:\"none\"\n" +
" priority:1\n" +
"}";
String expected = "{\n" +
" \"ssid\": \"test1\",\n" +
" \"psk\": \"test154695\",\n" +
" \"key_mgmt\": \"WPA-PSK\",\n" +
" \"sim_slot\": \"-1\",\n" +
" \"imsi\": \"none\",\n" +
" \"priority\": 1\n" +
"}";
Pattern p = Pattern.compile("(\\w+):([^\\n]*)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(malformed);
StringBuilder builder = new StringBuilder("{\n");
while (m.find()) {
String key = m.group(1);
String value = m.group(2);
if (key.equals("key_mgmt")) {
value = "\"" + value + "\"";
}
builder.append(String.format(" \"%s\": %s,\n", key, value));
}
builder.replace(builder.length() - 2, builder.length(), "\n}");
String corrected = builder.toString();
assert expected.equals(corrected);