如何使用子字符串从缓冲的阅读器中提取文本

时间:2013-01-03 22:54:51

标签: java android bufferedreader substring

我正在尝试使用子字符串和bufferedreader在两个标签之间提取文本,但我得到一个indexoutofbounds异常。使用if语句是因为我正在解析5个网页,我想从每个网页中读取文本,下面是我的代码:

    public static List<WebPage> readRawTextFile(Context ctx, int resId) {
    InputStream inputStream = ctx.getResources().openRawResource(
            R.raw.pages);

    InputStreamReader inputreader = new InputStreamReader(inputStream);
    BufferedReader buffreader = new BufferedReader(inputreader);
    String line;
    StringBuilder text = new StringBuilder();
    String txt1 = text.toString();
    try {
        int count = 0;
        while ((line = buffreader.readLine()) != null) {

            if (line.length() == 0) {
                int sURL = line.indexOf("<!--");
                int eURL = line.indexOf("-->");
                String newSub = txt1.substring(txt1.indexOf(sURL) + 1,
                        txt1.indexOf("\""));
                System.out.println(newSub);
            }

2 个答案:

答案 0 :(得分:3)

看看这段代码:

if (line.length() == 0) {
    int sURL = line.indexOf("<!--");
    int eURL = line.indexOf("-->");
    String newSub = txt1.substring(txt1.indexOf(sURL) + 1,
            txt1.indexOf("\""));
    ...
}

如果该行为空,您将进入块 。因此sURLeURL肯定会为-1。

然后你使用的是txt1.indexOf(-1),开头是奇怪的(为什么你会使用indexOf并传入一个索引?) - 我强烈怀疑indexOf这里的值将为-1,因此您将拥有:

String newSub = txt1.substring(0, -1);

......哪会失败。目前还不清楚为什么你在这里使用txt1.substring而不是line.substring

基本上,我认为你的代码存在错误的。您应该仔细查看所有非常的每一行,并将其更改为真正有意义。然后添加单元测试...

答案 1 :(得分:0)

由于sURL已经是

int sURL = txt1.indexOf("<!--");

,然后txt1.indexOf(sURL)

中没有多大意义
String newSub = txt1.substring(txt1.indexOf(sURL) + 1, txt1.indexOf("\""));

行,可能你的意思是:

String newSub = txt1.substring(sURL + 1, txt1.indexOf("\""));

这只会让您忘记之后使用txt1.indexOf("\"")的原因。