簡體   English   中英

如何從數組列表中迭代最后5個值

[英]How to iterate last 5 value from array list

嗨,我正在嘗試使用數組列表訪問字符串,其中我正在使用以下代碼

public class Demo {

public static void main(String args[])
{
      URL url;
              ArrayList<String> list1 = new ArrayList<String>();
              ArrayList<String> list2 = new ArrayList<String>();
              List commodity=null;
              List pric=null;
              int c,p=0;
         try {
            // get URL content
              String a="http://122.160.81.37:8080/mandic/commoditywise?c=Paddy";
              url = new URL(a);
              URLConnection conn = url.openConnection();
            // open the stream and put it into BufferedReader
              BufferedReader br = new BufferedReader(
                               new InputStreamReader(conn.getInputStream(), "UTF-8"));
              StringBuffer sb=new StringBuffer();
              String inputLine;
              while ((inputLine = br.readLine()) != null)
            {
          //    System.out.println(inputLine);
              String s=inputLine.replace("|", "\n");
              s=s.replace("~"," ");
              StringTokenizer str = new StringTokenizer(s);
                    while(str.hasMoreTokens())
            {
              String mandi = str.nextElement().toString();
              String price = str.nextElement().toString();
              list1.add(mandi);
              list2.add(price);
         }

       }
               {
                   commodity = list1.subList(200, 207);
                   pric = list2.subList(0, 8);
                   for (c = 0, p = 0; c < commodity.size() && p < pric.size(); c++, p++) {
System.out.println(commodity.get(c));
                   }
               }}
         catch(Exception e){
         System.out.println(e);
         }
}
}

在這里,我得到以下Excepton java.lang.IndexOutOfBoundsException: toIndex = 207

如果我用

{


  commodity = list1.subList(200, 206);

  for (c = 0, p = 0; c < commodity.size() && p < pric.size(); c++, p++) {
      System.out.println(commodity.get(c));
     }
      }}

它工作正常,我知道為什么會這樣,但是我想處理一下,因為我將來的字符串可能要到207、208

我如何獲得我的輸出

提前致謝?

如您所說, commodity = list1.subList(200, 207); 不起作用,但commodity = list1.subList(200, 206); 起作用,這意味着索引超出范圍,並且206是ArrayList中的最后一項。 所以我假設您想要從200到length-1的子字符串。 因此,您可以使用:

commodity = list1.subList(200, lis1.size()-1);

現在,對起始索引200進行硬編碼也很危險,列表大小可能小於200! 因此,您可以使用類似:

if(list1.size>5)
    commodity = list1.subList(lis1.size()-5, lis1.size()-1);
else
    //it is an error condition , so handle it as you want to

如果可以確定list1應該從哪里開始,還可以執行檢查以查看大小是否大於200。 另一種方法是遍歷element並將其單獨添加。 如果您有辦法確定是芒果還是價格,就應該這樣做。 PS:即使您確定列表的長度超過200,進行檢查也沒有害處。這是一個好習慣。 希望這可以幫助。

如果您想要最后5個值,為什么不這樣做

final int listSize = list1.size();

if (listSize >= 5) {
    commodity = list1.subList(listSize - 5, listSize - 1);

    // ...
} else {
    // Error handling
}

應該是這樣的:

  commodity = list1.subList(list.size()-5, list1.size()-1);

除非要保留​​對這些元素的引用,否則不必使用subList來遍歷最后五個元素。

int i = yourList.size() - 5;

for (i = i < 0? 0 : i; i < yourList.size(); i++) {
    //do what you want
}

僅獲取最后五個元素並處理異常:

    try {
        commodity = list1.subList(list1.size()-5, list1.size());
    } catch (IndexOutOfBoundsException e) {
        /* when list1 has less than 5 elements */
        commodity = list1;
    } catch (NullPointerException e) {
        /* when list1 is null */
        commodity = new ArrayList<String>();
    }
    System.out.println(commodity);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM