当前位置: 首页 > 知识库问答 >
问题:

我有一个具有14个值的ArrayList,但get IndexOutOfBounds异常。我检查了它们是否为null,并打印了值

斜光耀
2023-03-14
int index=0;
ArrayList<Integer> list = new ArrayList<>(14);


for (index = text.indexOf("$");
  index >= 0;
  index = text.indexOf("$", index + 1))

  {
     list.add(index);   
  }

  System.out.print(list.size());


System.out.println(text.substring(list.get(12)+1,list.get(12)+8));    
System.out.println(text.substring(list.get(13)+1, list.get(13)+8));

System.out.println(text.substring(list.get(14)+1,list.get(14)+9));
System.out.println(text.substring(list.get(14)-10, list.get(14)+9));                            

String a7 = text.substring(list.get(7)+1,list.get(7)+8);
String a8 = text.substring(list.get(8)+1,list.get(8)+8);
String a9 = text.substring(list.get(9)+1,list.get(9)+8);
String a10 = text.substring(list.get(10)+1,list.get(10)+8);
String a11 = text.substring(list.get(11)+1,list.get(11)+7);
String a12 = text.substring(list.get(12)+1,list.get(12)+8);    
String a13 = text.substring(list.get(13)+1, list.get(13)+8);
String a14 = text.substring(list.get(14)+1,list.get(14)+9);
String a15 = text.substring(list.get(14)-10, list.get(14)+9);

错误:

线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:12,大小:12。util。ArrayList。java上的rangeCheck(ArrayList.java:653)
。util。ArrayList。在pkgfinal获取(ArrayList.java:429)。最终的main(最终版本,java:240)

我确保索引12有一个值,但我仍然得到这个错误。“文本”是扫描的文档

编辑:您选择打开此文件:Scan.pdf /C:/用户/sahaj/文档/NetBeansProjects/最终/构建/类/

981.83

$3279. 13

线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:12,大小:12

at java.util.ArrayList.rangeCheck(ArrayList.java:653)

at java.util.ArrayList.get(ArrayList.java:429)

at pkgfinal.Final.main(Final.java:245)

453

共有3个答案

郭璞
2023-03-14

在不知道输入数据的确切格式的情况下,这是我想出的。了解更多关于数据的信息将使您能够简化此逻辑。

String text = "This is a receipt $12.10 and $14.50";

ArrayList<BigDecimal> dollarAmounts = new ArrayList<>();
int index = 0;
while ((index = text.indexOf("$", index)) != -1) {
  int whitespace = text.indexOf(" ", index + 1);
  if (whitespace == -1) {
    dollarAmounts.add(new BigDecimal(text.substring(index + 1)));
  } else {
    dollarAmounts.add(new BigDecimal(text.substring(index + 1, whitespace)));
  }
  index++;
}

for (BigDecimal dollarAmount : dollarAmounts) {
  System.out.println(dollarAmount);
}

您最初的示例对ArrayList的工作方式做出了一些错误的假设。

当您创建ArrayList(14)时,您将后备数组大小设置为14。ArrayListObject[]支持,当该数组填满时,它需要创建一个更大的后备数组并将原始数组中的所有元素复制到其中。

这很慢。

如果您知道将用200万个对象填充阵列,那么最好在该容量附近启动,以减少内部复制操作。

汪玮
2023-03-14

ArrayList不包含14个值。

创建新的ArrayList时,其构造函数接受的整数是初始容量,这并不意味着数组包含14个null。

具有初始容量的ArrayList包含一个具有14个空槽的对象数组,但其“大小”字段设置为0,因为您没有向ArrayList添加任何元素。

调用get方法时,它会检查索引

郭永安
2023-03-14
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 12, Size: 12

因此,您的列表包含12个元素,您不能使用方法列表。get(12) 因为java。util。列表是零索引的,您应该使用列表。get(11) 以获取第12个元素。

 类似资料:
  • 问题内容: 只是一个简单的问题,如果我克隆一个进程,则克隆的进程的PID是相同的,是吗?fork()创建一个子进程,其PID不同,但其他所有事物都相同。Vfork()创建一个具有相同PID的子进程。Exec致力于将当前正在执行的流程更改为其他流程。 我在所有这些陈述中都正确吗? 问题答案: 不完全的。如果通过fork / exec或vfork / exec克隆进程,则将获得新的进程ID。将为您提供

  • 有一个名为“矩阵”的哈希图,它有很多键。每个键的值都是一个具有自己值的ArrayList。考虑到这一点,我无法找到一种方法来测试ArrayList值中是否有特定值,因为如果我将字符串参数传递给HashMap的方法“.containsValue()”,该方法将找到ArrayList对象,测试将为false。因此,我必须做一些相当疯狂的事情,就像我在例子中所做的那样。正如您所看到的,没有像“getAr

  • 问题内容: 如何检查两个ArrayList是否彼此不同?我不在乎有什么区别,我只想知道它们是否不相同。 我每分钟都会从数据库中获取分数列表,并且只有当我获取的分数列表与我在一分钟前获取的分数列表不同时,我才希望将其发送给客户端。 现在,ArrayList的值实际上是我创建的一个类(包含名称,lvl,等级,得分)。 我需要实施吗? 问题答案: 这是一个简单的方法,可以检查2个数组列表是否包含相同的值

  • 我需要检查一个arraylist中的任何值是否存在于另一个arraylist中: 它打印“它不包含”。我需要知道是否有方法比较这两个arraylist,如果其他arraylist中存在任何值,它应该返回。我知道迭代可以有所帮助。有什么简单的方法可以做到这一点吗?