前提知識
- 字元串底層是char數組 1char=2Byte=16bit
- 字元是根據不同類型的編碼映射的,類似于字典.Java預設Unicode編碼
- 在Java中你寫’a’和(char)97 是一樣的,不懂看看編碼表
代碼+原理 講解
- 示例代碼
// example String a ="a"; String b =" 半角空格(普通的) 半角空格但不換行"+(char)160; a.concat(b); // 注意 trim 是不能去除後面那個空格 b.trim(); // 轉為char數組 或者直接debug 均可看到 底層結構 char[] chars = b.toCharArray(); System.out.println(chars); System.out.println(a); System.out.println(b);
debug截圖:
分析:在trim之後我們發現 1 處已經沒有了,2 處仍舊存在,但是是我們手打的’ ‘,3 處是我們定義的(char)160,很明顯.我們trim的兩邊的空格左邊已經完成了,右邊失敗了.
. . . . . 但是我們已經找到了這兩個空格是不同的. 他們分别是 (char)32 和(char)160;同時得出trim也是替換的(char)32.看源碼截圖:
注意:不要自作聰明 用replaceAll(’ ‘); 你這不是一樣的隻替換掉數組中的(char)32位置嗎?要使用replaceAll((char(160)+’’));這樣就行了 -
額外的
. . . . 你還可以看到漢字’半’他是一個char.但是UNICODE編碼.
- 附加常用特殊字元參考
/**普通的英文半角空格Unicode編碼*/
private static final int SPACE_32 = 32;
/**中文全角空格Unicode編碼(一個中文寬度)*/
private static final int SPACE_12288 = 12288;
/**普通的英文半角空格但不換行Unicode編碼(== ==   == no-break space)*/
private static final int SPACE_160 = 160;
/**半個中文寬度(==   == en空格)*/
private static final int SPACE_8194 = 8194;
/**一個中文寬度(==   == em空格)*/
private static final int SPACE_8195 = 8195;
/**四分之一中文寬度(四分之一em空格)*/
private static final int SPACE_8197 = 8197;