尝试在HTML标记之间查找文本时出错

时间:2016-11-20 18:42:55

标签: java android html

我正在尝试在Android应用上动态提取某些HTML标记之间的文本,例如<h4>,<h3>,<h2>。我试图编写代码,但是一旦我尝试调用该函数,应用程序就会崩溃。

这是我的代码:

import java.util.ArrayList;
import java.util.List;

public class Extractor {

    String code = ""; //--------------------------------Some HTML Code
    List<Integer> fromIndex , toIndex;
    List<String> headings;


    public void populate() {

        int index;

        ArrayList<String> oTag = new ArrayList<>();
        oTag.add("<h4>");
        oTag.add("<h3>");
        oTag.add("<h2>");

        for (String ot : oTag) {
            index = code.indexOf(ot);
            while (index >= 0) {
                fromIndex.add(index + ot.length());
                index = code.indexOf(ot, index + ot.length());
            }
        }

        ArrayList<String> cTag = new ArrayList<>();
        cTag.add("</h4>");
        cTag.add("</h3>");
        cTag.add("</h2>");

        for (String ct : cTag) {
            index = code.indexOf(ct);
            while (index >= 0) {
                toIndex.add(index);
                index = code.indexOf(ct, index + ct.length());
            }
        }

        for(int i = 0 ; i < toIndex.size() ; i++)
        {
            headings.add(code.substring(fromIndex.get(i),toIndex.get(i)));
        }
    }
}

Android Studio显示的错误是:

java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
                      at com.myuser.hplap.myapp.Extractor.populate(Extractor.java:50)
                      at com.myuser.hplap.myapp.MainActivity$1.onClick(MainActivity.java:38)
                      at android.view.View.performClick(View.java:5204)
                      at android.view.View$PerformClick.run(View.java:21158)
                      at android.os.Handler.handleCallback(Handler.java:739)
                      at android.os.Handler.dispatchMessage(Handler.java:95)
                      at android.os.Looper.loop(Looper.java:148)
                      at android.app.ActivityThread.main(ActivityThread.java:5461)

变量code是从包含网页完整HTML代码的活动发送的,但为了简单地表示它,我已将其包含在同一个类中。

此外,在为此寻找解决方案时,我已经看到了许多其他解决相同问题的方法(例如:正则表达式,XPath,HtmlCleaner等),但我很困惑哪种方法最适合我。有人可以推荐一种经过试验和测试的方法吗?

1 个答案:

答案 0 :(得分:0)

您永远不会初始化List<String> headings

关于HTML标签问题,我认为这些可以让你开始:

如果您已经阅读过这些内容,并且没有得到您想要的答案(例如:what's wrong with HTMLParser?) - 那么请详细说明您的先决条件。