Thinkers'Studio
JavaとC言語の自習ツール
文字列の前後の空白を除去する trim

 文字列の前後の空白を除去したいときは、Stringクラスのメソッド trim が使えます。
 trim は、現在の文字列の先頭と最後の空白を削除したコピー、または先頭と最後に空白が無ければそのまま返します。
   ( 関連する自作メソッド : 文字列に含まれる空白や改行を除去する

trim メソッドの形式 】
   String trim()

 下のプログラムでは、次のような色々な空白を含んだ文字列を trim してみて、動作を確かめます。
  • 全角スペースは削除される?
  • タブや改行は?
  • 空白しかない文字だったら?
  • 長さ 0 の空文字列は?
trim の動作を見るプログラム 】
 trim から返された結果を一旦 String型のオブジェクト変数に受け取って表示します。 空白が除去されたか分かるように、## ではさみ、先頭に添字の番号もプリントします。
class UseTrim {
    public static void main( String[] args ) {

        String s[] = { " 先頭と中間と 最後に半角スペース "
                     , " 先頭と中間と 最後に全角スペース "
                     , "\t先頭と中間と\t最後にタブ\t"
                     , "\n先頭と中間と\n最後に改行\n"
                     , "空白の無い文字列"
                     , "      "   //半角空白のみ
                     , "   "   //全角空白のみ
                     , ""         //空の文字列
                     };

        for( int i = 0; i < s.length; i++ ) {
            String t = s[i].trim();
            System.out.println( i + ":##" + t + "##" );
        }
    }
}
(実行結果)
0:##先頭と中間と 最後に半角スペース##
1:## 先頭と中間と 最後に全角スペース ##
2:##先頭と中間と        最後にタブ##
3:##先頭と中間と
最後に改行##
4:##空白の無い文字列##
5:####
6:##   ##
7:####
・・・ 前後の半角スペースは除去された
・・・ 全角スペースは前後のものも残っている
・・・ 前後のタブは除去された
・・・ 前後の改行は除去された

・・・ これはそのまま
・・・ 半角空白のみだったのが、空文字列となった
・・・ 全角空白はそのまま
・・・ 元々空の文字列で、そのまま
 半角スペース、タブ、改行は、前後にあるものが除去されています。

trim が空白をどう扱うか

 trim メソッドの仕様を見ると、'\u0020'(半角スペース)の文字コードより大か小かが判断基準になっています。
 まず、そのまま返されるのは、まったく空の文字列か、文字列の最初と最後に '\u0020' 以下の文字がないときです。
 それ以外は、次のような取り扱いになっています。

 [ '\u0020'(半角スペース)以下の文字しかないとき ]
   空の文字列を生成して返す
 [ それ以外があるとき ]
   '\u0020' より大きい最初の文字 〜 '\u0020' より大きい最後の文字までの部分文字列を生成して返す

 タブや改行は '\u0020' より前にあります。 ほかに '\b'(バックスペース)や '\r'(キャリッジリターン)などもそうです。
 全角空白の文字コードは '\u3000' で、'\u0020' より大きいので、空白とみなされません。

(今回のクイズです)
 次のような文字列を trim した結果は、どうなるでしょうか?

 " \t\n\t\n "  //半角空白,タブ,改行のみでできた文字列
   (答えは、次回の Java の Tips で ・・・)
前回のクイズの答え: (前回の問題を見る
(1),(2),(3)ともフォーマットエラーになります。
 (1) 先頭のデータが文字列なので、Integer.parseInt( ) で NumberFormatException が起こります。
 (2) 2, 3個目のデータが空です。データ個数 array.length をチェックする自作の例外処理でエラーになります。
 (3) こちらはデータ個数が多過ぎます。