【发布时间】:2012-05-02 13:47:09
【问题描述】:
我向网络服务器上的 php 脚本发送了一个获取请求,该脚本返回 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);
}
【问题讨论】:
-
indexOf 如果没有找到,则返回 -1。 -1 不是有效的索引。
-
对于你的第一个循环,你肯定只传递至少包含一个
_的字符串,这不是最后一个字符吗?不过,无法解释第二点:-/ -
在尝试提取子字符串之前,您确实应该将 indexOf 的结果与 1 和 line-1 的长度进行比较。
-
您确定字符串中包含“_”字符吗?否则 'indexOf()' 将返回 -1
-
是的,我很肯定,当我使用 Log.v 显示该行时,会显示中间带有“_”的整个字符串
标签: php android string exception