ホーム > プログラミング > Javaで末尾の全角/半角スペースをトリムする

Javaで末尾の全角/半角スペースをトリムする

夜も遅いっていうか、もう朝なので簡単にメモ。

Javaで文末の全角半角スペースをトリムするという、実に簡単な実装なんだけど、いくつか実装方法があって、性能としてどれが最も優れているか気になったので、テストしてみました。実装方法は以下の3つ。

  1. 正規表現(String#replaceAll)
  2. StringBuilderで後方から走査して、半角/全角スペースの場合は削除する
  3. char配列で後方から走査して、半角/全角スペースでない場合は新しいchar配列に格納する。

上記の実装をstaticメソッドにして、それぞれ1000回ずつ呼び出して、プロファイルしてみました。環境はMac OS 10.5、JDK1.5、NetBeans 6.5です。

結果は、3>2>1の順で高速に動きました。1は正規表現を使っているので最も遅かったですね。

  1. 正規表現:7.85ms
  2. StringBuilder:2.45ms
  3. char配列:0.464ms

正直、StringBuilderとchar配列でここまで差が出るとは思わなかった。配列とStringでインスタンスを2回作るので2と3はそんなに差が出ないと思ったんですけどね。何事もやってみるもんです。

以下はソース。乱暴に書いてます。

public class Main {

private static final String VALUE = "あいう    ";

    public static void main(String[] args) {

        for(int i = 0; i < 1000; i++) {
            trim1(VALUE);
        }

        for(int i = 0; i < 1000; i++) {
            trim2(VALUE);
        }

        for(int i = 0; i < 1000; i++) {
            trim3(VALUE);
        }
    }

    public static String trim1(String value) {
        return value.replaceAll("( | )+\\z", "");
    }

    public static String trim2(String value) {

        StringBuilder sb = new StringBuilder(value);

        for(int i = sb.length()-1; 0 <= i; i--) {
            char c = sb.charAt(i);
            if(c == ' ' || c == ' ') sb.deleteCharAt(i);
            else break;
        }
        return sb.toString();
    }

    public static String trim3(String value) {

        char[] ary = value.toCharArray();
        char[] trimed = new char[ary.length];

        for(int i = ary.length-1; 0 <= i; i--) {

            if(ary[i] == ' ' || ary[i] == ' ') continue;

            else trimed[i] = ary[i];

        }

        return new String(trimed);
    }
}
Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • Twitter
カテゴリー: プログラミング タグ: ,
  1. コメントはまだありません。
  1. トラックバックはまだありません。