【发布时间】:2016-07-14 12:35:29
【问题描述】:
我编写的嵌套 for 循环有问题。本质上,我有一个 JSON 文件,我试图将其解析为单个变量,以便我可以将这些变量添加到数据库中进行查询。
这是外循环和内循环:
for (int x = 0; x <= fixtures.length; x++) {
String testFixture = fixtures[x];
testFixture = testFixture.replace("\"", "");
testFixture = testFixture.replace("[", "");
testFixture = testFixture.replace("{", "");
testFixture = testFixture.replace("}", "");
String[] singleFixture = testFixture.split(",");
for (int i = 0; i <= singleFixture.length; i++) {
//System.out.println(singleFixture[i]);
String test = singleFixture[i];
String[] fix1 = test.split(":");
singleFixtureComplete.add(fix1[0]);
singleFixtureComplete.add(fix1[1]);
}
singleFixtureComplete.add(Arrays.toString(singleFixture));
}
它的输出是fixtures[0]处的一个json数组,就是这样......
fixtures.length = 381。所以我希望当内循环完成时,它将返回到外循环的顶部,并且 x 将增加 +1。
正在发生的事情是内部循环完成,仅此而已。 x 不会迭代到 fixtures.length 即 381 次。
fixtures 中的每个索引都是一个包含 34 个键对的 JSON 数组。所以 singleFixture.length = 34。这行得通,我迭代了 34 次。然后循环结束,外部循环被忽略。
有人知道我在这里做错了什么吗?
【问题讨论】:
-
您将收到一个
ArrayIndexOutOfBoundsException。使用i < singleFixture.length而不是i <= singleFixture.length。或者,更简单的是for (String[] test : singleFixture) {,因为否则你永远不会真正使用i。 -
旁注:您可能想了解单层抽象原则。如果您避免将这么多代码放在一个地方,您将不会相信代码会变得多么容易阅读。
-
使用调试器逐步执行,您将能够亲眼看到。
-
就像旁注一样。您可以为 Java 使用
JSON library,更高的抽象级别使得处理此类复杂数据变得更加容易。这是一个比较其中一些的链接:blog.takipi.com/… -
@angryip 当然,但它是 18000 行 json 文件:/