我正在尝试从API获取信息,但我只是想不通如何使用String.indexOf从此行获取信息。 我是自学成才的,直到现在还没有使用indexOf的地步,我试图在网上寻找有关如何使用indexOf的教程,但是我所能找到的只是在String中找到特定的字母,而不是只需从一行中获取一个字符串即可。
我尝试多次更改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个字母名称。
答案 0 :(得分:0)
看来您的台词看起来像这样:
"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所做的操作。