java字符串替换空格符_特殊的空格(Java无法替换字符串中的空格)转
一、自己的問題
先說一下自己碰到的問題,自己在本地建立了一個json文件,并且把它格式化了(為了看著美觀);然后在Java后臺中去讀取(使用BufferedReader的readline方法),但是讀取后的Json字符串總是帶著一部分空白,使用了多種替換方式(trim,空格,換行符,制表符等)都無法消除空格,導致后續創建json對象時提示錯誤。
原因:是因為這個讀取到的不是Java常見的空格字符,而是特殊的空格(ASCII值160,嚴格來說這個是擴展ASCII值的部分,因為原生ASCII最大只到127),因此不能使用常規的替換方式。
具體處理見下文(轉載的博客,為了加深記憶,特意又放到自己的博客中)。
二、處理辦法
最近遇到個問題,在頁面的搜索框輸入帶有空格的字符串時,總是無法從db中搜索出來對應的數據,于是將db里的空格復制出來,發現其ASCII碼值為160,這才知道,原來ASCII碼中除了32之外還有160這個特殊的空格。下邊是查看字符對應ASCII值的邏輯:
1 final char c1 = ' '; //db里的空格
2 final char c2 = ' '; //手動輸入的空格
3 System.out.println((int)c1); //160
4 System.out.println((int)c2); //32
平時我們用鍵盤輸入的空格的ASCII值是32,而這個ASCII值為160的空格,其實是不間斷空格(non-breaking space),是不是從來沒聽說過這東東?其實你平時一定也用過很多次的,就是頁面上的?所產生的空格。
不間斷空格non-breaking space的縮寫正是nbsp。這中空格的作用就是在頁面換行時不被打斷,如下:
1 頁面某一行的末尾是一個人名Zhang Xiaoming
我們希望在換行時人名不會被打斷,導致Zhang 在第一行末尾,而Xiaoming跑到第二行開頭,而是保持完整的人名在同一行的末尾,于是就有了不間斷空格。(在word中也有這種空格的使用)
如果使用了平常的空格,就會被頁面壓縮,變成下邊這樣
1 頁面某一行的末尾是一個人名Zhang2 Xiaoming
問題
但是不間斷空格有個問題,就是它無法被trim()所裁剪,也無法被正則表達式的\s所匹配,也無法被StringUtils的isBlank()所識別,也就是說,無法像裁剪尋常空格那樣移除這個不間斷空格。
我們可以利用不間斷空格的Unicode編碼來移除它,其編碼為\u00A0。
解決辦法如下:
1 replace("\u00A0", "")2 replaceAll("\\u00A0+", "") //這是正則表達式的寫法
3
4 String str = "aacsdfe "; //包含了不間斷空格的字符串
5 str = str.replace("\u00A0", "");6 str = str.replaceAll("\\u00A0+", "");
————————————————
以上內容非個人原創。
附原文鏈接:https://blog.csdn.net/lewky_liu/article/details/79353151
總結
以上是生活随笔為你收集整理的java字符串替换空格符_特殊的空格(Java无法替换字符串中的空格)转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优先队列的一种实现
- 下一篇: java for循环前面label_Ja