我正在尝试使用子字符串和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);
}
答案 0 :(得分:3)
看看这段代码:
if (line.length() == 0) {
int sURL = line.indexOf("<!--");
int eURL = line.indexOf("-->");
String newSub = txt1.substring(txt1.indexOf(sURL) + 1,
txt1.indexOf("\""));
...
}
如果该行为空,您将进入块 。因此sURL
和eURL
肯定会为-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("\"")
的原因。