2017-09-02 69 views
0

我已經制作了這個JSON解析器,並且我想獲取所有不同地址但不重複地址的副本(還有許多其他JSON對象也參與其中)。但是當我到達featuresArray.add(i, feature);時,我一直在收到錯誤響應。我在這裏做錯了什麼?Java使用繼續循環進行重複字符串檢查

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(); 
    } 
+0

下面是拋出異常(您忽略發佈)的方法的javadoc:https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#add-int- E-。它解釋了什麼時候拋出異常。讀取堆棧跟蹤。閱讀javadoc。你爲什麼不使用'add(feature)'?另外,不要使用原始類型(你也應該有編譯器警告)。 –

+0

你正在使用哪個庫進行解析是Gson? –

回答

0

在你的情況,

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

每當上述塊執行,特別是控制continue語句跳轉到

for (....; i++) 

所以i會砥遞增。
現在假設i = 1並且equals條件成立,那麼i將遞增。
然後i變爲2.現在假設equals返回false,那麼該語句執行

featuresArray.add(i, feature); 

所以,我是1,現在是2,所以它跳過在這種情況下的索引1
這可能會導致問題。

您可以通過修改codition這樣的:

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

應對指數的增量。