[英]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.