【发布时间】:2014-05-26 11:47:48
【问题描述】:
我正在尝试将 String 数组的元素复制到另一个数组中,但是会发生此异常。 我知道当 ArrayList 的大小不同时会出现异常,但我什至在定义第二个时考虑了第一个的大小。
这是代码,顺便说一句,我正在尝试制作一个程序来读取 txt 文件并检查其中的数据是否有序,使用 ArrayList 作为标签名称的持有者。
import java.io.*;
import java.util.*;
public class Reader1 {
public static void main(String args[]) throws IOException
{
FileInputStream in = null;
ArrayList<String> tag_tester = new ArrayList<String>(35);
tag_tester.add("ITEM");
tag_tester.add("ITEM_LIST");
tag_tester.add("ITEM_TYPE");
tag_tester.add("MODEL");
tag_tester.add("MODEL_YEAR");
tag_tester.add("MANUFACTURER");
tag_tester.add("PRICE");
tag_tester.add("SCREEN_TYPE");
tag_tester.add("DIMENSIONS");
tag_tester.add("RESOLUTION");
tag_tester.add("INTERFACES");
tag_tester.add("PIECES");
tag_tester.add("CPU_TYPE");
tag_tester.add("CAPACITY");
tag_tester.add("EXTENSIONS_NUMBER");
tag_tester.add("CPU_SPEED");
tag_tester.add("CORE_NUMBER");
tag_tester.add("CHIPSET");
tag_tester.add("RAM_TYPE");
tag_tester.add("SPEED");
tag_tester.add("HD_TYPE");
tag_tester.add("SIZE");
tag_tester.add("CONNECTION");
tag_tester.add("TECHNOLOGY");
tag_tester.add("PRINT_TYPE");
tag_tester.add("ORDER");
tag_tester.add("ORDER_LIST");
tag_tester.add("NAME");
tag_tester.add("PHONE");
tag_tester.add("NUMBER");
tag_tester.add("ORDER_DATE");
tag_tester.add("DELIVERY_DATE");
tag_tester.add("SALE");
tag_tester.add("SALES_LIST");
tag_tester.add("MODEL");
tag_tester.add("SALE_DATE");
ArrayList<String> tag_backup = new ArrayList<String>(tag_tester.size());
try {
BufferedReader br = new BufferedReader(new FileReader("AVAILABLE PRODUCTS.txt"));
String line;
int flag;
Collections.copy(tag_backup,tag_tester);
line = br.readLine();
do{
flag=0;
do{
for(int i=0; i<tag_backup.size(); i++) {
if ((line.trim().startsWith(tag_backup.get(i))) || (line.trim().startsWith("{")) || (line.trim().startsWith("}"))) {
tag_backup.set(i,"");
flag=1;
}
}
line = br.readLine();
}while ((line.trim().startsWith("}")) || flag==0);
Collections.copy(tag_backup,tag_tester);
}while ((line = br.readLine()) != null || flag==0);
if (flag==1){
System.out.println("error");
}
else{
System.out.println("check was succesful");
}
}finally {
if (in != null) {
in.close();
}
}
}
}
这里是txt文件。
ITEM_LIST
{
ITEM
{
ITEM_TYPE monitor
MODEL 124C300EW
MODEL_YEAR 2013
MANUFACTURER Samsung
PRICE 180
SCREEN_TYPE LED
DIMENSIONS 24
RESOLUTION 1920x1080
INTERFACES “HDMI DVI Component Scart USB”
PIECES 2
}
ITEM
{
ITEM_TYPE motherboard
MODEL T31D800RT
MODEL_YEAR 2013
MANUFACTURER Asus
PRICE 100
CPU_TYPE Intel
CAPACITY 64
EXTENSIONS_NUMBER 6
}
ITEM
{
ITEM_TYPE cpu
MODEL P70R280TY
MODEL_YEAR 2012
MANUFACTURER AMD
PRICE 150
CPU_SPEED 3.5
CORE_NUMBER 8
}
ITEM
{
ITEM_TYPE graphics
MODEL L32M689RI
MODEL_YEAR 2014
MANUFACTURER AMD
PRICE 160
CHIPSET AMD
CAPACITY 6
}
ITEM
{
ITEM_TYPE ram
MODEL K64F458VH
MODEL_YEAR 2013
MANUFACTURER Kingston
PRICE 90
RAM_TYPE DDR3
CAPACITY 4
SPEED 1600
}
ITEM
{
ITEM_TYPE hd
MODEL Y18T479UI
MODEL_YEAR 2013
MANUFACTURER Seagate
PRICE 50
HD_TYPE HDD
SIZE 2.5
CAPACITY 750
}
ITEM
{
ITEM_TYPE keyboard
MODEL L58S523KL
MODEL_YEAR 2013
MANUFACTURER Logitech
PRICE 25
CONNECTION Wireless
}
ITEM
{
ITEM_TYPE mouse
MODEL I59L460BV
MODEL_YEAR 2013
MANUFACTURER Microsoft
PRICE 15
TECHNOLOGY Laser
CONNECTION Wired
}
ITEM
{
ITEM_TYPE printer
MODEL O35I132LP
MODEL_YEAR 2013
MANUFACTURER HP
PRICE 110
TECHNOLOGY Laser
PRINT_TYPE COLORED
}
}
也许我不应该使用 ArrayList 来完成这项任务?提前致谢。
编辑:有人请求堆栈跟踪,这里是:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Source does not fit in dest
at java.util.Collections.copy(Collections.java:589)
at Reader1.main(Reader1.java:59)
编辑 2:在我将第一个 Collections.copy 替换为 tag_backup 构造函数后,弹出另一个异常:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size:
0
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at Reader1.main(Reader1.java:67)
【问题讨论】:
-
你应该添加堆栈跟踪。
标签: java collections arraylist io tags