我向webserver上的php脚本发送一个get请求,返回3行文本。我像这样处理来自服务器的响应:
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
比我解析这样的行:
line = "";
while ((line = rd.readLine()) != null) {
String a = line.substring(0, line.indexOf('_'));
String b = line.substring(line.indexOf('_') + 1);
}
这会不断抛出一个StringIndexOutOfBounds异常,我真的不明白为什么。我已经在我的项目的其他地方使用了类似的方法(使用不同的PHP脚本返回不同的文本行和不同的解析)并且它工作得很好。当我记录返回的行以查看它们是否从服务器正确返回时,它们与PHP脚本发送的行相同。
这是有趣的部分。当我变得非常绝望时,我尝试使用以下方法测量线:
int l = line.length();
然后我的线路返回了11。比,当我只是尝试使用以下方式显示内容时:
line.charAt(5);
它抛出了一个StringIndexOutOfBoundsException:5。我真的不知道这有什么问题。有没有人有想法?谢谢!
修改
这是PHP脚本
$query = mysql_query("SELECT * FROM users");
while($row = mysql_fetch_array($query)) {
print("{$row['id']}\n{$row['number']}\n");
}
这是我的java代码:
while ((line = rd.readLine()) != null) {
Log.v("connection - user list", line); //This line logs: 1_485963
//But this doesent work
String a = line.substring(0, line.indexOf('_'));
String b = line.substring(line.indexOf('_') + 1);
}
答案 0 :(得分:4)
最有可能indexOf
返回-1而line.substring(0, -1);
会抛出StringIndexOutOfBoundsException
修改强>
你可能会在1_485963
行之后阅读一个看不见的字符/行吗?
假设输入如下:
1_485963\n\n
然后在日志中你只会看到1_485963
,但第二次循环运行它会崩溃。
答案 1 :(得分:0)
首先尝试调试。或者试试这个
我很确定line.indexOf('_')在给定的字符串中不可用
1)首先打印字符串的日志并检查'_'字符是否可用。
尝试这样做以避免StringIndexOutOfBoundsException
while ((line = rd.readLine()) != null) {
if (line.indexOf('_') != -1) {
String a = line.substring(0, line.indexOf('_'));
String b = line.substring(line.indexOf('_') + 1);
}else{
// means that index is not found
}
}
最后你告诉了字符串len = 11 当在第5位打印char时抛出错误。
检查你在打印字符串len和在位置5打印字符之间做了什么。
有时候你可能会从缓冲区输入流中获得垃圾字符。 becoz从n / w传递。检查一下。
答案 2 :(得分:0)
也许我变老了,失明了,但这是怎么回事。
print("{$row['id']}\n{$row['number']}\n");
生产
1_485963
当然
print("{$row['id']}_{$row['number']}\n");
是你需要的。 如果这不是PHP的语法,那就道歉了 一直拒绝坚持我的大脑。