您好我正在尝试使用数组列表访问字符串,其中我使用以下代码
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
我如何获得输出
提前致谢?
答案 0 :(得分:2)
如你所说,commodity = list1.subList(200, 207);
不起作用,commodity = list1.subList(200, 206);
有效,这意味着索引超出界限,206是ArrayList中的最后一项。所以我假设您想要从200到长度为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。 另一种方法可以迭代元素并单独添加它们。如果您有办法确定它是mandi还是价格,就应该这样做。 PS:即使你确定列表的长度超过200,检查也没有坏处。这是一个很好的做法。希望这会有所帮助。
答案 1 :(得分:1)
如果你想要最后5个值,为什么不像
那样做final int listSize = list1.size();
if (listSize >= 5) {
commodity = list1.subList(listSize - 5, listSize - 1);
// ...
} else {
// Error handling
}
答案 2 :(得分:0)
应该是这样的:
commodity = list1.subList(list.size()-5, list1.size()-1);
答案 3 :(得分:0)
除非您想保留对这些元素的引用,否则您不必使用subList
来迭代最后五个元素。
int i = yourList.size() - 5;
for (i = i < 0? 0 : i; i < yourList.size(); i++) {
//do what you want
}
答案 4 :(得分:0)
只需获取最后五个元素并处理异常:
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);