問題背景:
一般Java項目里,當我們需要做一些數(shù)據(jù)過濾的時候兽掰,往往通過trim方法對數(shù)據(jù)進行首尾空格刪除忧便,然后再通過判斷l(xiāng)ength的長度是否等于0來判斷數(shù)據(jù)是否為空。但是暴心,有時候會出現(xiàn)這樣的神奇問題,用該方法過濾不掉某些為空的字符串杂拨。如此专普,一般就是掉進全角空格和半角空格的坑里面了。
我們來看一下全角空格和半角空格的定義弹沽,一般情況檀夹,我們不會太關注這個問題:
全角和半角區(qū)別:一個漢字字符在電腦上要占兩個英文字符的位置,當你輸入符號的時候全角的字符也是要占兩個英文字符的位置策橘,半角的只占一個字符也就是半個漢字的位置炸渡。這就是全角和半角的區(qū)別。通常的英文字母丽已、數(shù)字鍵蚌堵、符號鍵都是半角的,半角的顯示內碼都是一個字節(jié)沛婴。半角全角主要是針對標點符號來說的辰斋,全角標點占兩個字節(jié),半角占一個字節(jié)瘸味。而不管是半角還是全角,漢字都還是要占兩個字節(jié)够挂,在編程序的源代碼中只能使用半角標點(不包括字符串內部的數(shù)據(jù))旁仿。
-
全角空格
占了兩個英文字符的位置 -
半角空格
只占一個英文字符的位置
我們再來看下Java的trim方法:
trim方法只能去除首尾的半角空格,對全角空格無效
For Example:
String space1 = " "; // 全角空格,輸入法把全角勾上枯冈,就可以打出全角字符
String space2 = " "; // 半角空格
System.out.println(space1.trim().length); // 2
System.out.println(space2.trim().length); // 0
解決方案:
-
方法一
使用正則表達式毅贮,將全角替換為半角,再使用trim方法尘奏。
parameter.replaceAll("[ | ]", " ").trim().length() == 0
-
方法二
直接正則表達式滩褥,去除全角空格,再使用trim方法
parameter.replaceAll("\\s","")