如何在 ArrayList 中单独使用数据?

How to use data separately in an ArrayList?

我正在 Java 中编写一个程序,将文本文件中的数据读取到 Arraylist 中。 文本文件有 10 行数据,每行包含一段数据,格式为:"Integer1-String1:String2" 示例:“123-ABC:DEFG”。我想像这样保存 Integer1、String1 和 String2:

int listNumber; //This would be Integer1
String listData1; //This would be String1
String listData2; //This would be String2

所以我的问题是如何在不将每种类型的数据保存到单独的数组中的情况下执行此操作。 我正在考虑这样的事情,但它不起作用:

int givenNumber = Integer.parseInt(myArrayList.substring(0, "-"));

这是我目前的情况:

final String INPUT = "data.txt";
Scanner input = new Scanner(new FileReader(INPUT));

ArrayList<String> myArrayList = new ArrayList<String>();

while (input.hasNext()){
                myArrayList.add(input.next());
            }

for (int i = 0; i < myArrayList.size(); i++) {
                int givenNumber = Integer.parseInt(myArrayList.substring(0, "-"));
                System.out.println(myArrayList.get(i)); //Print the all data
            }

抱歉,如果此信息不清楚,但我是 Java 的新手,不知道如何更好地描述它。

你可以创建一个ArrayLists的ArrayList,二维数组,Arraylist中的每个Arraylist都可以设置为不同的类型。例如:

  ArrayList<ArrayList> a = new ArrayList<ArrayList>();
  a.add(new ArrayList<Integer>());
  a.add(new ArrayList<String>());
  a.add(new ArrayList<String>());

您可能想要为您的数据创建一个助手 class:

class ListData {
   int listNumber;
   String listData1;
   String listData2;

   ListData(int listNumber, String listData1, String listData2) {
      this.listNumber = listNumber;
      this.listData1 = listData1;
      this.listData2 = listData2;
   }

   @Override
   public String toString(){
       return listNumber + "-" + listData1 + ":" + listData2;
   }
}

然后将其存储在 ListData 数组中:

List<ListData> datalist = new ArrayList<>();
datalist.add(new ListData(listNumber, listData1, listData2);

编辑: 您的实现没有解析来自扫描仪的数据。以下代码段逐行解析 Scanner 输入并添加到列表中。

while (input.hasNext()) {
   // Read each line from the scanner
   String input = input.next();

   // Split data on two delimiters '-' and ':'
   String[] data = input.split("-|:");
   int listNumber = Integer.parseInt(data[0]);
   String listData1 = data[1];
   String listData2 = data[2];

   // Add to the datalist
   datalist.add(new ListData(listNumber, listData1, listData2));
}

创建一个新的 Class 来存储所有三个值。在同一文件夹中名为 "LineEntry.java" 的新文件中创建 class。

public class LineEntry{
    int listNumber; //This would be Integer1
    String listData1; //This would be String1
    String listData2; //This would be String2
    public LineEntry(String line){
         // You have to check wrong input cases as well.
         String [] token = line.split("-|:");  
         listNumber = Integer.parseInt(token[0]);

         listData1 = token[1];
         listData2 = token[2];
    } 
} 

并在读取每一行时从 class 创建对象。将对象放入 ArrayList