0

Androidアプリケーション用に作成された次のJavaメソッドがあります。

private String removeWifiFudge(String message, String removedFudge)
{
    int find1 = 255;   //FF
    int find2 = 0;     //00
    int find3 = 204;   //CC
    int find4 = 36;    //24

    char[] charMessage = message.toCharArray();

    boolean find1True = false;

    for (char eachCharacter : charMessage)
    {
        if (find1True)
        {
            if ((int) eachCharacter == find2)
            {
                removedFudge = removedFudge + String.valueOf((char)find1);
            }
            else
            {
                if ((int) eachCharacter == find3)
                {
                    removedFudge = removedFudge + String.valueOf((char)find4);
                }
                else
                {
                    removedFudge = removedFudge + String.valueOf((char)find1);

                    removedFudge = removedFudge + String.valueOf(eachCharacter);
                }
            }

            find1True = false;
        }
        else 
        {
            if ((int) eachCharacter == find1)
            {
                find1True = true;
            }
            else
            {
                removedFudge = removedFudge + String.valueOf(eachCharacter);
            }
        }
    }   

    return removedFudge;
}

簡単に言えば、文字列、メッセージを受け取り、0xFF00 と 0xFFCC のインスタンスを 1 文字ずつ検索します。これらのインスタンスを見つけると、それぞれ 0xFF と 0x24 に置き換え、新しい文字列removedFudgeに入れます。

このメソッドは CPU 時間のかなりの割合を占めており、Eclipse に埋め込まれた Java プロファイラーである DDMS を使用すると、メソッド時間の 53% が費やされていることがわかりました。

java/lang/StringBuilder. (Ljava/lang/String;)V

これは、文字列の初期化に時間がかかっていると言っているようですが、既に初期化された文字列を渡して新しいメッセージを入れるため、初期化文字列がどこから来ているのかわかりません。

DDMSの専門家はいますか?

4

1 に答える 1

4

文字列連結により、実行時に StringBuilder が使用されるため、プロファイラーに表示されます。

于 2012-08-17T10:28:26.683 に答える