【问题标题】:Android Java String code optimization neededAndroid Java String 代码需要优化
【发布时间】:2017-08-19 03:48:22
【问题描述】:

我在解析 html 数据时遇到问题。 Java 的 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 倍。感谢您的帮助。

【问题讨论】:

标签: android string performance indexof


【解决方案1】:

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 对象一次,因此不要将其放入循环中。

【讨论】:

  • 请给我一个例子来获得这两个之间的值 start = buffer.indexOf("") + 12; end = buffer.indexOf("");我需要介于两者之间的值作为字符串
  • 您在解析 XML 内容吗?如果是这样,正如迈克尔在 cmets 中所建议的那样,您应该使用 XmlPullParser
【解决方案2】:

我制作了 xml 并使用了使用 XmlPullParser 的建议。快一点,但仍然在某些设备上超过一分钟,文件大小为 1.7mb。相当混乱。

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多