java正则表达式的应用:appendReplacement && appendTail

本文介绍了一种将非标准的、类似JSON但包含不合规结构的字符串转换为合法JSON数组的方法。通过使用正则表达式,匹配并替换不规则部分,成功构造出标准的JSON数组结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个将非标准的字符串转为JSON数组结构的操作:

最近有个场景,调用外部的方法,得到了一串字符串,结构如下:

[
	type[company] {
		"mc": "名称1",
		"code": "001"
	},
	type[edge] {
		"mc": "名称2",
		"code": "002"
	},
	type[company] {
		"mc": "名称3",
		"code": "003"
	},
	type[edge] {
		"mc": "名称4",
		"code": "004"
	},
	type[company] {
		"mc": "名称5",
		"code": "005"
	}
]

en...这结构,看着像JSON数组,但是又不是,因为是调的别人的接口,也不好改返回结果的格式。也查了好些文章,毫无所获,后来问了公司的项目经理大佬,告诉我他以前处理过这种类似的数据,思路就是将类JSON的数据通过正则匹配替换不规则的部分,构造成合法的JSON结构。有些不好理解,直接上代码:

public static void main(String[] args) {
    //原字符串
    String str = "[type[company]{\"mc\":\"名称1\",\"code\":\"001\"},type[edge] 
                 {\"mc\":\"名称2\",\"code\":\"002\"},type[company]{\"mc\":\"名称 
                 3\",\"code\":\"003\"},type[edge]{\"mc\":\"名称 
                 4\",\"code\":\"004\"},type[company]{\"mc\":\"名称5\",
                 \"code\":\"005\"}]";

    //正则:获取字符串中不符合JSON标准的部分
    Pattern pattern = Pattern.compile("(type)(\\[.+?\\])\\{");
    Matcher matcher = pattern.matcher(str);

    //sbb用于存放替换后的字符串
    StringBuffer sbb = new StringBuffer("");

    //遍历匹配后的结果
    while (matcher.find()) {
        //将匹配到的内容转换为标准的JSON结构
        String s = "{\"" + matcher.group(1) + "\":\"" + matcher.group(2) + "\",";
        //把上次替换位置到这次匹配到的位置之间的字符串+转换后的标准json结构,一起追加到sbb中
        matcher.appendReplacement(sbb, s);
    }
    //把最后一次匹配位置之后的字符串也追加到sbb中。
    matcher.appendTail(sbb);

    System.out.println("sbb = " + sbb);
}

输出结果:

sbb = [{"type":"[company]","mc":"名称1","code":"001"},{"type":"[edge]","mc":"名称2","code":"002"},{"type":"[company]","mc":"名称3","code":"003"},{"type":"[edge]","mc":"名称4","code":"004"},{"type":"[company]","mc":"名称5","code":"005"}]

格式化一下:

[{
	"type": "[company]",
	"mc": "名称1",
	"code": "001"
}, {
	"type": "[edge]",
	"mc": "名称2",
	"code": "002"
}, {
	"type": "[company]",
	"mc": "名称3",
	"code": "003"
}, {
	"type": "[edge]",
	"mc": "名称4",
	"code": "004"
}, {
	"type": "[company]",
	"mc": "名称5",
	"code": "005"
}]

得到了标准的JSON数组结构,对JSON数组的操作就不赘述了,这个网上多的很。

不知道有没有遇到相似情况的,感觉应该很少吧。自己先记录下,毕竟万一以后再遇到了,到处都搜不到处理方式也是挺心累的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值