Android Java 需要优化字符串代码
Android Java String code optimization needed
我在解析 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 倍。感谢您的帮助。
对于较长的字符串,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
对象一次,因此不要将其放入循环中。
我做了 xml 并使用了使用 XmlPullParser 的建议。快一点,但在某些设备上仍然超过一分钟,diring 文件大小为 1.7mb。很混乱。
我在解析 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 倍。感谢您的帮助。
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
对象一次,因此不要将其放入循环中。
我做了 xml 并使用了使用 XmlPullParser 的建议。快一点,但在某些设备上仍然超过一分钟,diring 文件大小为 1.7mb。很混乱。