【Java】文字列の前後から半角と全角の空白スペースを除去する方法

スポンサーリンク

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;
}

 String (Java Platform SE 8)