Java使用continue in循环进行重复字符串检查

时间:2017-09-02 17:13:38

标签: java json loops parsing continue

我已经制作了这个JSON解析器,我希望获得所有不同地址的副本,但没有重复的地址(还有许多其他JSON对象也参与其中)。但是当我到达featuresArray.add(i, feature);时,我一直收到错误回复。我在这里做错了什么?

private static void simpleJSON() throws IOException {
    JSONParser parser = new JSONParser();
    JSONArray featuresArray = new JSONArray();
    String check = "check";

    try {

        Object obj = parser.parse(new FileReader(filepath));
        JSONArray jsonarray = (JSONArray) obj;
        for (int i = 0; i < jsonarray.size(); i++) {
            JSONObject jsonobject = (JSONObject) jsonarray.get(i);
            String location_name = (String) jsonobject.get("location_name");
            String street_address = (String) jsonobject.get("street_address");
            if (street_address.equals(check)) {
                continue;
            }
            check = street_address;

            Map feature = new LinkedHashMap();
            feature.put("location_name", location_name);
            feature.put("street_address", street_address);
            featuresArray.add(i, feature);
        }
    } catch (ClassCastException c) {
        c.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

在你的情况下,

if (street_address.equals(check)) {
  continue;
}

每当执行上述块时,continue语句特别是控件跳转到

for (....; i++)

所以i会增加 现在假设i = 1并且equals条件变为真,则i将增加 然后我变成2.现在假设equals返回false然后执行此语句

featuresArray.add(i, feature);

所以,我是1,现在是2,所以在这种情况下它会跳过索引1 这可能会导致问题。

您可以像这样修改您的姓名:

if (street_address.equals(check)) {
  i--;
  continue;
}

来对抗索引的增量。