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 的实例。在找到这些实例时,它分别将它们替换为 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 回答