【问题标题】:Getting info from a website using indexOf使用 indexOf 从网站获取信息
【发布时间】:2019-10-06 19:08:02
【问题描述】:

我正在尝试从 API 获取信息,但我不知道如何使用 String.indexOf 从该行获取信息。 我是自学成才的,直到此时我才使用 indexOf,我尝试在网上寻找有关如何使用 indexOf 的教程,但我能找到的只是在字符串中找到特定的字母,而不是只需从一行中获取一个字符串。

我已尝试多次更改 indexOf 的值,但均未成功。 ID 已正确设置,因为有人帮了我,但我想我还需要一个名字,但我不知道。

URL url = new URL("https://api.mojang.com/users/profiles/minecraft/" + 
args[0]); //args[0] == name of player
URLConnection con = url.openConnection();
InputStream isr =con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(isr));
String line;
while ((line = br.readLine()) != null) {
    int startOfID = line.indexOf("\"id\"") + 4;
    int startOfValueID = line.indexOf("\"", startOfID) + 1;
    int endOfValueID = line.indexOf("\"", startOfValueID);
    // Figure out Name indexOf
    int startOfName = line.indexOf("\"name\"") + 2;
    int startOfValueName = line.indexOf("\"", startOfName);
    int endOfValueName = line.indexOf("\"", startOfValueName);
    Name = line.substring(startOfValueName, endOfValueName);
    UUID = line.substring(startOfValueID, endOfValueID);
    sender.sendMessage(Name + " | " + UUID); // ignore (debugging 
    purposes)
    strUUIDCut = UUID.substring(0,8) + "-" + UUID.substring(8,12) + "- 
    " + UUID.substring(12,16) + "-" + UUID.substring(16,20) + "-" + 
    UUID.substring(20,32);
}

没有错误被抛出。我期待从 API 中获得一个名称。无论是 3 个字母的名称还是 15 个字母的名称。

【问题讨论】:

  • 调试应用程序。设置断点。检查数值,找出问题所在。不运行它就无法解决。

标签: java string web-scraping


【解决方案1】:

你的台词看起来像这样:

"id"="1", "name" = "foo"

在解析 id 时,您正在检索 "id" (0) 的开头,并且正确添加了子字符串的长度 (4)。然后,从那里开始,通过搜索下一个 " 字符的索引来检索实际 ID 值的开始。

现在,您应该对名称执行相同的操作。 "name" 子字符串的长度为 6 个字符。因此,计算startOfName时应该加6而不是2:

int startOfName = line.indexOf("\"name\"") + 6;

然后,因为实际名称仅在下一个" 字符之后开始:

int startOfValueName = line.indexOf("\"", startOfName) + 1;

再次等同于您对 ID 所做的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    相关资源
    最近更新 更多