日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java替换指定位置的字符串

發布時間:2024/3/26 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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替换指定位置的字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。