मुझे HTML डेटा को पार्स करने में समस्या है। जावा का String.indexof() बेहद धीमा है। क्या कोई इसे तेज करने के लिए कोई समाधान सुझा सकता है?

                      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
Sapphire91140 19 अगस्त 2017, 06:48

2 जवाब

सबसे बढ़िया उत्तर

Pattern matcher रेगेक्स का उपयोग लंबे स्ट्रिंग्स के लिए indexOf() से काफी तेज है (छोटे स्ट्रिंग्स के लिए, indexOf() रेगेक्स से बेहतर है)। अपने स्ट्रिंग पैटर्न की अनुक्रमणिका खोजने के लिए अपने टेक्स्ट और रेगेक्स का प्रयोग करें।

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());

}

ध्यान दें कि आपको अपने रेगेक्स को प्रत्येक रेगेक्स के लिए केवल एक बार Pattern ऑब्जेक्ट में संकलित करना होगा और इसलिए इसे लूप के अंदर न रखें।

1
Bob 19 अगस्त 2017, 07:36

मैंने एक्सएमएल बनाया और XmlPullParser का उपयोग करने के लिए सलाह का इस्तेमाल किया। थोड़ा तेज, लेकिन फिर भी कुछ उपकरणों पर मिनटों में, फ़ाइल का आकार 1.7mb। काफी भ्रमित करने वाला।

0
Sapphire91140 19 अगस्त 2017, 12:09