0

我向网络服务器上的 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);
}
4

3 回答 3

4

最有可能indexOf返回 -1 并line.substring(0, -1);抛出StringIndexOutOfBoundsException

编辑
可能是您可能正在逐行阅读不可见的字符/1_485963行吗?

假设输入是这样的:

1_485963\n\n

然后在日志中你只会看到1_485963但第二次循环运行它会崩溃。

于 2012-05-02T13:54:28.723 回答
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 打印 char 之间做了什么。

最后,有时您可能会从缓冲区输入流中获得垃圾字符。因为它是从 n/w 传过来的。也检查一下。

于 2012-05-02T14:12:23.683 回答
0

也许我老了,瞎了,但这是怎么回事

    print("{$row['id']}\n{$row['number']}\n");

生产

1_485963

一定

print("{$row['id']}_{$row['number']}\n");

是你需要的。如果那不是有效的 PHP,我深表歉意,因为它的语法一直拒绝留在我的脑海中。

于 2012-05-02T14:43:40.413 回答