問題發現
筆者在JavaWeb開發時,由於從數據庫讀取的文章段落存在空格,所有筆者覺得用以下方法將其消除:
這很合邏輯吧,正則表達式 \s+ 用於匹配一個或多個空白符,按理來說所有的空格都會被替換成 9 ,然而結果是下面這樣的:
嘗試解決
於是猜想,可能是其他空白符導致的,於是嘗試替換 (html空格), \n (java編程常用換行符), \r\n (windows換行符) 都行不通。
最後決定控制檯輸出一下,這幾個隱形字符的ASCII碼,結果如下:
如圖,段首的空白符替換之後,文字前面還存在空格。根據輸出的ASCII碼值可以通過查表的值,前面兩個字符分別爲 空格 和 換行 。那麼問題來了,後面兩個是什麼?
問題解決
筆者直接把 12288 這串數字往百度一貼,原來早有前人也遇到了這個問題,得知這串數字表示的是 全角空格 ,而平時編程都是使用英文半角的空格,所以用"\s+"替換失敗。
解決辦法就是使用,先把全角空格替換爲半角空格,再用上面說的方法去替換。
String s=str.replace((char)12288," ");
s=s.replaceAll("\\s+","");