2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > java替换指定位置的字符串

java替换指定位置的字符串

时间:2022-05-30 09:37:30

相关推荐

java替换指定位置的字符串

一、吐槽

在和安卓部门对接过程中,真的是遇到非常扯淡的问题,我们需要的是一段坐标系的参数,安卓定义的圆形的地理坐标是 "经度 纬度"的形式,也就是说参数是经度+空格+纬度形式,然而到了折线和矩形多边形时,地理坐标却变成了 ["经度","纬度","经度","纬度","经度","纬度"]这样的形式,与我们后端的定义接口有问题,后端是["经度 纬度","经度 纬度"]形式,由于项目比较急,一下更改安卓参数来不及了,因此只能含泪更改参数格式。

对于老开发来说,这个规律其实挺简单,就是替换掉奇数位置的 "," 双冒号加逗号变成空格即可。

思路是有了,但是怎么处理呢?

不可能傻傻的去用str.split拆分然后一个一个去判断吧?这样极为复杂,而且还会带来一些奇奇怪怪的bug

给你们看一下我们新来的同事写的代码:

public StringBuffer editParams(String str) {String repl = "\",\"";String[] strArr = str.replaceAll(repl, " ").split(" ");StringBuffer sub = new StringBuffer();for (int i = 0; i < strArr.length; i++) {if ((i + 1) % 2 == 0 && i + 1 != strArr.length) {sub.append(strArr[i]).append("\",\"");} else {sub.append(strArr[i]).append(" ");}}return sub;}

这样的代码咋一看,确实是没有问题,转换后的代码也符合app到后台的需求格式,后台能够正常解析。

但是,从后台到安卓,我又得将所有的空格替换为 "," 符号!问题就来了,他的代码不知道咋回事,后面就多了一个空格,导致解析的数据会多了一个 "," 符号,会造成安卓解析失败!他的解决办法估计又得添加多个条件判断,谁知道后续还有没有坑?

为了实现一个简单思路,添加了这么多的判断逻辑,在我认为这是得不偿失的。

二、解决办法

我这里只要替换掉奇数位置的 "," 为空格即可,那么阅读过String源码的同学肯定会第一时间想到正则表达式,这里不要觉得正则表达式耗费性能哈,String源码都用了正则表达式,你还有啥资格在这里BB?

下面就是我的解决思路,不仅是奇数位置,偶数位置,第一个位置等等等,皆可以实现,而且不会多出无用的空格,经过对接测试,表现完美。

private String appTransToMap(String string) {int count = 1;String findText = "\",\"";//要替换的符号Pattern p = pile(findText);Matcher m = p.matcher(string);//替换的符合与要对比的符号进行匹配StringBuffer sb = new StringBuffer();while (m.find()) {count = count + 1;if (count % 2 == 0) {//这里为什么是等于0而不是1呢?因为我的count定义就是1而不是0m.appendReplacement(sb," ");//会将替换后的结果存在sb中}}m.appendTail(sb);//这段代码必须要添加return sb.toString();}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。