0

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

2134:193

192:1856

1092:1850

980:759

ETC

我想处理文件并将其添加到数组中,然后能够获取 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();
}
4

3 回答 3

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

确保你有正确的 try catch 语句

于 2013-10-11T23:44:08.550 回答
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 的概念形式可确保在所有情况下都正确关闭流。在您的代码中,如果从流中读取会导致抛出异常,则流将保持半打开状态。

  • 如果您使用“外部”的动态数据,则必须正确检查它。您永远不知道是否有人意外或故意将错误放入文件中。这就是我内心的 try-catch 所做的。

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

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

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

于 2013-10-11T23:56:17.293 回答
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();
    }
于 2013-10-11T23:50:03.430 回答