Java で半角と全角のスペース(空白文字)を除去する方法です。
スペース除去
Java でスペースを除去する方法としてString#trim
があります。ただしこのメソッドで除去できるのは半角スペースのみが対象になります。
String str = " 半角スペース "; System.out.println(str.trim()); // "半角スペース" String str = " 全角スペース "; System.out.println(str.trim()); // " 全角スペース "
しかし、実際には全角スペースも一緒に除去したい場合も多いですし、半角スペースも実は2種類あります。HTMLを触ったことがあれば一度は使った事があると思いますが
です。trim
メソッドを使っても除去できない半角スペースがある場合は文字コードを確認してみてください。
スペース種類 | 実際の表記 | 文字コード | 16進数表記 | ユニコードエスケープ |
---|---|---|---|---|
半角スペース① | " " |
32 |
0x20 |
\u0020 |
半角スペース② | |
160 |
0xA0 |
\u00A0 |
全角スペース | " " |
12288 |
0x3000 |
\u3000 |
という訳で上記のスペース全てを除去するようにしたtrim
メソッドが次の通りです。空白文字をユニコードエスケープの表記に変えて全角スペースと
を加えただけです。
public static String trimWhitespace(String str) { if (str == null || str.length() == 0) { return str; } int st = 0; int len = str.length(); char[] val = str.toCharArray(); while ((st < len) && ((val[st] <= '\u0020') || (val[st] == '\u00A0') || (val[st] == '\u3000'))) { st++; } while ((st < len) && ((val[len - 1] <= '\u0020') || (val[len - 1] == '\u00A0') || (val[len - 1] == '\u3000'))) { len--; } return ((st > 0) || (len < str.length())) ? str.substring(st, len) : str; }