2017-08-19 11 views
0

私はHTMLデータの解析に問題があります。 JavaのString.indexof()は極端に遅いです。誰もが大幅にそれをスピードアップするための任意のソリューションを提案することができますか?Android Java Stringコードの最適化が必要

     while (counter2 <= found) 
        { 
         number = Integer.toString(counter2); 
         start = page.indexOf("<result" + number + ">") + 8 + number.length(); 
         end = page.indexOf("</result" + number + ">"); 
         if (start > 0 && end > 0) 
         { 
          buffer = page.substring(start, end); 
         } 
         page = page.substring(end, page.length()); 
         start = buffer.indexOf("<word>") + 6; 
         end = buffer.indexOf("</word>"); 
         if (start > 0 && end > 0) 
         { 
          Word = buffer.substring(start, end); 
         } 
         start = buffer.indexOf("<vocabulary>") + 12; 
         end = buffer.indexOf("</vocabulary>"); 
         if (start > 0 && end > 0) 
         { 
          Dictionary = buffer.substring(start, end); 
         } 

         start = buffer.indexOf("<id>") + 4; 
         end = buffer.indexOf("</id>"); 
         if (start > 0 && end > 0) 
         { 
          ID = buffer.substring(start, end); 
         } 

         sqlDriver.createDictionaryWord("Wordlist", ID, Word, Dictionary); 
         // counter = counter + 1; 
         counter2 = counter2 + 1; 

        } 

何とか5倍以上速く動作させる必要があります。助けてくれてありがとう。

+0

なぜこの[XmlPullParser](https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html)を使用しないのですか? –

答えて

1

Pattern matcher regexを使用すると、より長い文字列(indexOf()は正規表現よりも優れています)の場合は、かなり長い文字列の場合には、indexOf()よりもかなり高速です。テキストと正規表現を使用して、文字列パターンのインデックスを探します。あなたはすべての正規表現のために一度だけPattern対象に、あなたの正規表現をコンパイルする必要があるので、ループ内でそれを入れていない

Pattern pattern = Pattern.compile(regex); 

public static void getIndices(String text, Pattern pattern) { 

    Matcher matcher = pattern.matcher(text); 

    matcher.find(); 
    System.out.print("Start index: " + matcher.start()); 
    System.out.print("End index: " + matcher.end()); 

} 

注意。

+0

あなたは私にその2つの間で価値を得るための例を挙げてください。 start = buffer.indexOf( "")+ 12; end = buffer.indexOf( ""); 文字列の間に値が必要 – Sapphire91140

+0

XMLコンテンツを解析していますか?もしそうなら、コメントに示唆されているように、[XmlPullParser](https://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html)を使用してください。 – Bob

0

xmlを作成し、XmlPullParserの使用にアドバイスを使用しました。少し高速ですが、一部のデバイスでは1分に1回、ファイルサイズは1.7メガバイトです。かなり紛らわしい。

関連する問題