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 = Pattern.compile(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(); }?
總結
以上是生活随笔為你收集整理的java替换指定位置的字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 邮箱长度_数据库中电子邮件地
- 下一篇: 上期ctp期货API android 客