我正在使用Java Scanner类来分隔字符串
这是我的字符串
%22locations%22:[{%22linkId%22:21737516,%22latLng%22:{%22lat%22:12.9219,%22lng%22:77.56022},%22type%22:%22s%22},
{%22linkId%22:21741609,%22latLng%22:{%22lat%22:12.921509,%22lng%22:77.49382},%22type%22:%22s%22},
{%22linkId%22:18632091,%22latLng%22:{%22lat%22:12.904157,%22lng%22:77.470489},%22type%22:%22v%22},
{%22linkId%22:76684742,%22latLng%22:{%22lat%22:12.88959,%22lng%22:77.45314},%22type%22:%22s%22}
我希望输出为
locations:[{latLng:{lat:12.9219,lng:77.56022},type:'s'},
{latLng:{lat:12.921509,lng:77.49382},type:'s'},
{latLng:{lat:12.904157,lng:77.470489},type:'v'},
{latLng:{lat:12.88959,lng:77.45314},type:'s'}
]
这是我的代码
s.useDelimiter("%22|linkId:\\d+,");
我无法删除linkid:integer
并在type
值附近添加单引号,例如's'
代替s
。
答案 0 :(得分:1)
不需要Scanner
,只需使用String.replaceAll
:
首先删除所有%22
,
然后删除所有linkId:...
,
最后在类型值周围添加引号:
String output = input.replaceAll("%22", "")
.replaceAll("linkId:\\d+,", "")
.replaceAll("type:(.)", "type:'$1'");
答案 1 :(得分:0)
您的分隔符无法接受linkId:\\d+
,因为您的字符串不包含linkId:21741609
但linkId%22:21741609
等连续数据。
所以你需要使用
s.useDelimiter("%22|linkId%22:\\d+,");
但是使用扫描仪无法将s
更改为's'
,因为扫描程序只能用于读取(或跳过某些)数据,而不能用于添加数据。您最好的解决方案是阅读整个字符串,然后将其内容更改为.replaceAll("type:(\\w)", "type:'$1'")
mentioned by @geert3。