這麼一段字符串,實際內容應該是123abc456,在獲取到的時候就變成下面的內容,確定要處理呀.... 又得手擼了代碼了 \u202E : 會將字符串進行翻轉, \u202D : 會將字符串互換位置,但爲何從123後面開始互換位置暫時還不知道, 測試得出,\u202D 會比 \u202E 先執行,也不能說先執行,順序靠前吧,應該是ABCDE....這樣排序的。 String a = "123\u202E654\u202Dabc"; 邏輯就是我先分紅三段,a = 123,b = \u202E654,c = \u202Dabc, 而後去掉b中的 \u202E,翻轉b的順序, 去掉c的 \u202D a + c + b 就是最後得出的正常字符,下面示例是處理多個這種字符的,就是加了一個遞歸
/** * @Author : Yanqiang * @Date : 2019-11-13 * @Return : String * @Description : 處理微信暱稱Unicode字符問題 */ public static String cutString(String a) { //判讀字符串不爲null if (a != null && !a.equals("")) { //若是包含這兩個特殊字符就處理,不包含直接return if (a.contains("\u202E") || a.contains("\u202D")) { int firstIndex = a.indexOf("\u202E"); int lastIndex = a.indexOf("\u202D"); //取第一段 -->[123] String first = a.substring(0, firstIndex); //取從第一次出現 [\u202D] 到 最後 --> [\u202Dabc\u202E456\u202Dabc] String last = a.substring(lastIndex); //取第一次出現 [\u202E] 到 [\u202D] 之間的值 --> [\u202E456] String middle = a.substring(firstIndex, lastIndex); //下面兩步是把開頭的Unicode字符去掉 middle = middle.substring(1); last = last.substring(1); //翻轉中間的字符串 middle = new StringBuffer(middle).reverse().toString(); //拼接成完整的字符串 a = first + last + middle; if (a.contains("\u202E") || a.contains("\u202D")) { //剛纔last的最後還可能有特殊字符,若是還有就遞歸 return cutString(a); } } } return a; }