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

时间:2016-03-03 21:52:38

标签: java arraylist separator

我正在用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的新手,并且不知道如何更好地描述它。

3 个答案:

答案 0 :(得分:4)

您可能想为数据创建一个帮助程序类:

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));
}

答案 1 :(得分:0)

您可以创建ArrayLists,2D阵列的ArrayList,并且该Arraylist中的每个Arraylist都可以设置为differet类型。例如:

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

答案 2 :(得分:0)

创建一个存储所有三个值的新类。在名为&#34; LineEntry.java&#34;的新文件中创建类。在同一个文件夹中。

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];
    } 
} 

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