Java 如何将逗号分隔的ArrayList添加到树中

Java 如何将逗号分隔的ArrayList添加到树中,java,file-io,arraylist,Java,File Io,Arraylist,我有一个Movie对象,其中的数据成员是字符串title、int year和ArrayList。如何将这个ArrayList添加到我的树中,我有点困惑。我正在从文件中读取此信息,例如: Forrest Gump/1994/Tom Hanks Star Wars/1977/Mark Hamill,Carrie Fisher,Harrison Ford 到目前为止,我已经能够添加除ArrayList之外的所有内容。我想我还需要line.split数组的内容。此外,一些电影没有如示例中所示的多个演员

我有一个Movie对象,其中的数据成员是字符串title、int year和ArrayList。如何将这个
ArrayList
添加到我的树中,我有点困惑。我正在从文件中读取此信息,例如:

Forrest Gump/1994/Tom Hanks
Star Wars/1977/Mark Hamill,Carrie Fisher,Harrison Ford
到目前为止,我已经能够添加除ArrayList之外的所有内容。我想我还需要
line.split
数组的内容。此外,一些电影没有如示例中所示的多个演员,因此我不确定如何实现这一点。我尝试了几种不同的方法,但最终得到了一个
indexootfboundsexception

以下是我到目前为止的情况:

try{
        Scanner read = new Scanner( new File("movies.txt") );
        do{
            ArrayList<String> actorList = new ArrayList<String>();
            String line = read.nextLine();
            String [] tokens = line.split("/");
            //I think I need to add another split for commas here.
            //actorList.add() here

            tree.add( new Movie(tokens[0], Integer.parseInt(tokens[1]), actorList ));
        }while( read.hasNext() );
        read.close();
    }catch( FileNotFoundException fnf ){
        System.out.println("File not found.");
    }
试试看{
扫描仪读取=新扫描仪(新文件(“movies.txt”);
做{
ArrayList actorList=新的ArrayList();
字符串行=read.nextLine();
String[]tokens=line.split(“/”);
//我想我需要在这里为逗号添加另一个拆分。
//actorList.add()此处
add(新电影(令牌[0],Integer.parseInt(令牌[1]),actorList));
}while(read.hasNext());
read.close();
}捕获(FileNotFoundException fnf){
System.out.println(“未找到文件”);
}
如果需要,她是我的构造器:

public Movie( String t, int y, ArrayList<String> a ){
    title = t;
    year = y;
    actors = a;
}
公共电影(字符串t,int y,数组列表a){
title=t;
年份=y;
演员=a;
}

您可以用逗号分割最后一个标记,并将创建的每个字符串插入
actorList

...
String [] tokens = line.split("/");
String lastToken = tokens[tokens.length-1];
if (tokens.length == 3) {
    String[] actors = lastToken.split(",");
    for (String actor : actors) {
        actorList.add(actor);
    }
}
...

您可以用逗号分割最后一个标记,并将创建的每个字符串插入
actorList

...
String [] tokens = line.split("/");
String lastToken = tokens[tokens.length-1];
if (tokens.length == 3) {
    String[] actors = lastToken.split(",");
    for (String actor : actors) {
        actorList.add(actor);
    }
}
...

希望下面的代码能够工作。拆分逗号分隔的参与者列表,将该
字符串
数组转换为
列表
,并将该
列表
添加到
数组列表
。使用
Arrays.asList()
作为简洁的实现

try{
        Scanner read = new Scanner( new File("movies.txt") );
        do{
            ArrayList<String> actorList = new ArrayList<String>();
            String line = read.nextLine();
            String [] tokens = line.split("/");
            actorList.addAll(Arrays.asList(tokens[2].split(",")));

            tree.add( new Movie(tokens[0], Integer.parseInt(tokens[1]), actorList ));
        }while( read.hasNext() );
        read.close();
    }catch( FileNotFoundException fnf ){
        System.out.println("File not found.");
    }
试试看{
扫描仪读取=新扫描仪(新文件(“movies.txt”);
做{
ArrayList actorList=新的ArrayList();
字符串行=read.nextLine();
String[]tokens=line.split(“/”);
addAll(Arrays.asList(令牌[2].split(“,”));
add(新电影(令牌[0],Integer.parseInt(令牌[1]),actorList));
}while(read.hasNext());
read.close();
}捕获(FileNotFoundException fnf){
System.out.println(“未找到文件”);
}

希望下面的代码能起作用。拆分逗号分隔的参与者列表,将该
字符串
数组转换为
列表
,并将该
列表
添加到
数组列表
。使用
Arrays.asList()
作为简洁的实现

try{
        Scanner read = new Scanner( new File("movies.txt") );
        do{
            ArrayList<String> actorList = new ArrayList<String>();
            String line = read.nextLine();
            String [] tokens = line.split("/");
            actorList.addAll(Arrays.asList(tokens[2].split(",")));

            tree.add( new Movie(tokens[0], Integer.parseInt(tokens[1]), actorList ));
        }while( read.hasNext() );
        read.close();
    }catch( FileNotFoundException fnf ){
        System.out.println("File not found.");
    }
试试看{
扫描仪读取=新扫描仪(新文件(“movies.txt”);
做{
ArrayList actorList=新的ArrayList();
字符串行=read.nextLine();
String[]tokens=line.split(“/”);
addAll(Arrays.asList(令牌[2].split(“,”));
add(新电影(令牌[0],Integer.parseInt(令牌[1]),actorList));
}while(read.hasNext());
read.close();
}捕获(FileNotFoundException fnf){
System.out.println(“未找到文件”);
}
试试这个:

String actors = tokens[tokens.length-1];
actorList = Arrays.asList(actors.split(","));
试试这个:

String actors = tokens[tokens.length-1];
actorList = Arrays.asList(actors.split(","));

您是否已调试代码以查找
IndexOutOfBoundsException
的可能候选项?张贴完整的stacktrace。是的,您需要将
令牌[2]
转换为
列表
。如果您询问异常,请发布导致异常的代码以及异常的堆栈跟踪。告诉我们堆栈跟踪引用了哪一行。您是否已调试代码,以查找
索引AutofBoundsException
的可能候选项?张贴完整的stacktrace。是的,您需要将
令牌[2]
转换为
列表
。如果您询问异常,请发布导致异常的代码以及异常的堆栈跟踪。告诉我们堆栈跟踪引用了哪一行。虽然它可以工作,但它返回一个类型为
List
(而不是
ArrayList
)的不可变actorList。我不确定OP想要什么…@alfasin返回的列表不是一成不变的。它的大小是固定的。@JBNizet这就是我所说的不可变:)当然你可以修改它包含的对象,但是你不能修改列表本身(即使用
.add()
),你可以修改列表本身。你不能改变它的大小
list.set()
可以正常工作<代码>集合。排序(列表)可以正常工作。因此,它不是不变的,而是固定的大小。@JBNizet我仍然认为它不是您要修改的列表,而是其中的对象(有点像“交换”,它改变指针,而不是实际的对象或它们的容器,在我们的例子中,它们是列表的链接)。也就是说,我不知道“排序”会起作用——所以谢谢你教我一些新东西!虽然它可以工作,但它返回一个类型为
List
(而不是
ArrayList
)的不可变actorList。我不确定OP想要什么…@alfasin返回的列表不是一成不变的。它的大小是固定的。@JBNizet这就是我所说的不可变:)当然你可以修改它包含的对象,但是你不能修改列表本身(即使用
.add()
),你可以修改列表本身。你不能改变它的大小
list.set()
可以正常工作<代码>集合。排序(列表)可以正常工作。因此,它不是不变的,而是固定的大小。@JBNizet我仍然认为它不是您要修改的列表,而是其中的对象(有点像“交换”,它改变指针,而不是实际的对象或它们的容器,在我们的例子中,它们是列表的链接)。也就是说,我不知道“排序”会起作用——所以谢谢你教我一些新东西!我不是向下投票人,但它不会编译…
tokens[2]
是一个
字符串
不是数组-现在,你可以