【问题标题】:Trying to split an array into an arrayList试图将数组拆分为 arrayList
【发布时间】:2018-08-11 17:28:04
【问题描述】:

我正在尝试将已读取的文件拆分为数组。我正在读取的文件是这样排序的。

  • 劳里·马兰托;经理
  • Everett Flanders;经理
  • Rachel Cornforth;设计师
  • Rocco Burks;设计师
  • 拉鲁·马多克斯;设计师
  • Carmelo Grunden;测试员

所以在这里我把每一行都放在一个数组中,现在我试图把它们放在一个 arrayList 中并且它们必须被拆分。

try {                                                          
   String bestand = "C:\\Users\\admin\\Documents\\java oo labo's\\ProjectBeheer\\data\\personeel.csv";                             
   String[] lijnen = TextFile.readLines(bestand);
} catch (IOException io) {
    System.out.println("error" + io.getMessage());
}

这是我得到的,但它只显示最新的值,然后我得到一个错误。

String[] items = null; 
for (int i = 0; i < lines.length; i++) {
    items = lines[i].split(";");
}
List<String> itemList = Arrays.asList(items);
System.out.println(itemList);

有人知道我能做什么吗?谢谢。

现在的问题是itemList中只有最新的数据。 这是打印输出。

[Carmelo Grunden, tester]

【问题讨论】:

  • 请把你提到的错误贴出来。
  • 我的错,我加了。
  • 抱歉,我修复了错误,但我的数组列表只保存最后一个值,而不保存其他值。

标签: java arrays arraylist


【解决方案1】:

在您的 for 循环中,您每次迭代都会创建一个 new String 数组 (items)。但是,您只在for 循环之后创建List ,这意味着只会考虑最后一次迭代。尝试将您的代码更改为:

List<String> itemList = new ArrayList<>();
for (int i = 0; i < lines.length; i++) {
    for (String token : lines[i].split(";")) {
        itemList.add(token);
    }
}
System.out.println(itemList);

基于评论的扩展答案。

如果您的目标更像是在 cmets 中提到的 @Maurice,那么您可以将代码更改为:

List<String[]> itemList = new ArrayList<>();
for (String line : lines) {
    itemList.add(line.split(";"));
}

如果您希望将姓名和工作放在单独的列表中,您可以执行以下操作:

List<String> nameList = new ArrayList<>();
List<String> jobList = new ArrayList<>();
for (String line : lines) {
    String[] tokens = line.split(";");
    nameList.add(tokens[0]);
    jobList.add(tokens[1]);
}

由于每个名称对应一项工作,最好使用Map

Map<String, String> map = new HashMap<>();
for (String line : lines) {
    String[] tokens = line.split(";");
    map.put(tokens[0], tokens[1]);
}

这只会将名称连接到作业(而不是相反),并且它还限制使用 唯一 名称(因为 Map 不能有两个相同的键)。

最好的选择可能是创建一个类来保存这些信息。

public class Employee {
    private String name;
    private String job;

    public Employee(String name, String job) {
        this.name = name;
        this.job = job;
    }

    // Getters and setters omitted for brevity...
}

然后创建如下列表:

List<Employee> list = new ArrayList<>();
for (String line : lines) {
    String[] tokens = line.split(";");
    list.add(new Employee(tokens[0], tokens[1]));
}

【讨论】:

  • 这是将每个单词添加到数组列表的单独元素中。他不想将每个拆分后的数组存储在一个arraylist中吗?
  • @Maurice 不是根据他或她的代码是如何编写的。 Arrays.asList(items) 行表示目标是拆分每一行并将所有标记添加到 List 作为单独的元素。
  • @Slaw 这也可以,谢谢。但如果我也可以将它们拆分为一个单独的数组列表来获取名称和工作,那可能会更好。
  • @floriandewulf 在我的回答中添加了更多内容
  • @Slaw 太棒了,谢谢。但我怎样才能从第二个令牌中获取日期? list.add(new Employee(tokens[0], tokens[1]));如果我执行 list.get(1) 或更进一步,它只会返回 token[0]。
猜你喜欢
  • 1970-01-01
  • 2016-03-15
  • 2014-08-17
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
  • 2014-12-29
相关资源
最近更新 更多