Blog -
文字列の操作、連結でとてもスピードの速いStringBuilderですが
私がハマったところ(ただのおっちょこちょいですが)の原因と注意を記事にします。
StringBuilderをメンバーで持って使いまわす場合に初期化の方法として、setLength(0)を使います
こうする事で、初期化と同じ行為(ポインタを初期化)する事が出来ます。
private StringBuilder mStringBuilder = new StringBuilder(); //初期化 mStringBuilder.setLength(0);
これを分岐に使用してifで比較します。
private StringBuilder mStringBuilder = new StringBuilder(); //初期化 mStringBuilder.setLength(0); int ret = 0; //1-3の乱数 ret = (int)Math.floor(Math.random()*(3+1-1))+1; switch(ret){ case 1: mStringBuilder.append("A"); break; case 2: mStringBuilder.append("BB"); break; case 3: mStringBuilder.append("CCC"); break; default: mStringBuilder.append("A"); break; } if(mStringBuilder.equals("A")){ Log.d(TAG,mStringBuilder.toString); }
これを、何度か繰り返します。
A → BB → CCC → A と発生した場合最後のAではFALSEとして評価されます。
これは何故かというと、mStringBuilderはポインタをリセットしましたが中身のメモリがクリア
された訳では無いからです。
実際、最後のif分の評価は、ACC == A を評価していることになります。
if(mStringBuilder.toString().equals("A")){ Log.d(TAG,mStringBuilder.toString); }
この様に比較すると想定通り評価出来ます。
これにハマって余分にデバッグしてしまった^^;