2012年01月12日

IOちゃんってめっちゃ遅い

前回も書いたけどIO処理ってめっちゃ遅い

そこで
文字列を
out.println("");
で1行ずつ分けて出力するのと(可読性のために)
まとめて出力するのではどっちが早いのかと調べてみたところ

long time1 = System.currentTimeMillis();

for (int i = 0; i <= 9999; i++) {
out.println("文字列");
}

long time2 = System.currentTimeMillis();
StringBuilder sb=new StringBuilder();
for (int i = 0; i <= 9999; i++) {
sb.append("文字列");
}
out.println(sb.toString());
long time3 = System.currentTimeMillis();
long r1=time2-time1;
long r2=time3-time2;
out.println(String.valueOf(r1));
out.println(String.valueOf(r2));

GAE環境で7ms 1ms
ローカル環境で 213ms 20ms

つまり1行ずつ出力するとすごく時間がかかるので
行数がとんでもなく多い場合はまとめて出力したほうがいいかもしれません。
可読性はStringBuilder.append("");で1行ずつ書いていけばさほど変わら無いと思う
2012年01月10日

正規表現でのエスケープでつまった

正規表現でurlとかを探したい時
http://[a-z]*ドットcom/

とかってやるとする
ドットは正規表現では意味を持ってしまうからエスケープしなければならん

つまり¥.
としなければならない



Eclipsに「そんなエスケープはねーよ!!」と言われた

なるほど
¥もエスケープしなければならず
つまり¥¥.としなければならないんだ

これでしばらく悩んでた

Stringクラスで文字列結合はオワコン

IOってめちゃんこ重い。
str = a;
str +=b;
str +=c;




とかやってると重すぎて血を吐いて死んでしまうので

StringBuilderクラスをつかいましょ

sb.append(a);
sb.append(b);


str =sb.toString();
とすると百倍は早くなる


ちなみに
StringBuilderとStringBufferでは
びるだーの方が幾分早いという記事をちらっと見たことがある