将文本文件转换为数组

时间:2013-10-11 23:38:46

标签: java arrays split bufferedreader

所以我有一个包含这样的列表的文件

2134:193

192:1856

1092:1850

980:759

我想处理文件并将其添加到数组中,然后能够获取int的

像我想做的那样 System.out.println(“first +”:“+ second”;

不确定存储它的最佳方式是什么,但这是我到目前为止的尝试

public static void loadList() {
    BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
    String line;
    while ((line = br.readLine()) != null) {
        String args[];
        args = line.split(":");
        int first = Integer.toInt(args[0]);
        int second = Integer.toInt(args[1]);
        System.out.println(first + " : " + second);
    }
    br.close();
}

3 个答案:

答案 0 :(得分:3)

试试这个:

  

 Class DataClass
 {
   public int first; // Deliberately public 
   public int second;

   public DataClass(int val1, int val2){
   this.first = val1;
   this.second = val2;
   }
 }
  

代码

    public static void loadList() {

    ArrayList<DataClass> pairList = new ArrayList<DataClass>();
    BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
    String line;
    while ((line = br.readLine()) != null) {
        String args[] = line.split(":");
        int first = Integer.valueOf(args[0]);
        int second = Integer.valueOf(args[1]);
        DataClass valPair = new DataClass(first,second);
        pairList.add(valPair);
        System.out.println(valPair.first + " : " + valPair.second);
    }
    br.close();
 }

确保您有正确的尝试捕获语句

答案 1 :(得分:2)

在这里做一些Java魔术:

  public static class DataValue {

    protected final int first, second;

    public DataValue(int first, int second) {
      this.first = first;
      this.second = second;
    }
  }

  public static List<DataValue> loadList() throws FileNotFoundException, IOException {
    final List<DataValue> result = new LinkedList<>();
    try (BufferedReader br = new BufferedReader(new FileReader("./data.txt"))) {
      String line;
      String args[];
      while ((line = br.readLine()) != null) {
        try {
          args = line.split(":");
          final int first = Integer.parseInt(args[0]);
          final int second = Integer.parseInt(args[1]);
          System.out.println(first + " : " + second);
          result.add(new DataValue(first, second));
        } catch (NumberFormatException | NullPointerException | ArrayIndexOutOfBoundsExceptione) {
          System.out.println("Unable to process line: " + line);
        }
      }
    }
    return result;
  }

首先:这是Java 7代码,它不适用于Java 6.

  • 面向对象的原则之一是:将数据保持在一起。因此,上述方法使用特殊的数据持有者类,以确保您不会在以后意外混淆不同行的数字。

  • 使用try (stream) {}概念形式Java 7可确保在所有情况下正确关闭流。在你的代码中,如果从中读取它将导致异常被抛出,那么流将被半开。

  • 如果使用来自&#34;外部&#34;的动态数据,则必须正确检查。你永远不知道是否有人意外或故意将错误放入文件中。这就是我内心的尝试。

  • 在您的情况下使用ArrayList不是一个好主意,因为它具有固定的大小,并且您的数据可能不是固定大小,因此在内部存储期间必须重新创建几次读。在这种情况下,链接列表表现完美(但如果执行myList.get(index)则效果很差。)。稍后您可以像这样使用Java for-each循环:
    for (DataValue value : myList) { System.out.println(value.first + " : " + value.second); }

  • 除非必须,否则应避免在循环内声明变量。如果必须,请使用final来告诉JIT它可以对这些变量使用完全优化。

  • Integer.parseInt(string)是将字符串转换为整数的正确方法。请务必阅读关于何时抛出异常的定义!

答案 2 :(得分:0)

试试这个!

public static void loadList() throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new FileReader("./data.txt"));
        String line;
        while ((line = br.readLine()) != null) {
            if(line.trim().length() == 0)
                continue;
            String args[];
            args = line.split(":");
            int first = Integer.parseInt(args[0]);
            int second = Integer.parseInt(args[1]);
            System.out.println(first + " : " + second);
        }
        br.close();
    }