-4

我想要保持从 txt 文件中读取行并将它们保存到变量中以供以后处理的最佳方法最后处理它们编辑:

Scanner in = new Scanner(new FileReader(filename));

    while(in.hasNextLine()){
        answer=in.nextLine();
        if (answer.contains("-")) {
            temp=answer.split(":");
            value=Integer.parseInt(temp[0]);
            freq=Integer.parseInt(temp[1]);
        }

    }

在我到达 txt 文件末尾后我想要什么我想比较频率值并将它们从最小到更大存档

4

3 回答 3

2

读取整个文件的最简单方法是使用Files 便捷方法,例如:

List<String> lines = Files.readAllLines(Paths.get("path/to/your/file"),
                             Charset.forName("UTF-8"));

然后,您可以处理列表并使用这些行做您需要的事情。

于 2013-03-08T16:32:21.943 回答
0

如果要单独保存行,可以使用数组,否则只需将文件内容添加到字符串变量即可。

但是您应该指定要对内容执行的操作,以便我们为您提供帮助。

于 2013-03-08T16:27:31.243 回答
0

像这样的事情应该使用扫描仪来完成

Scanner s = new Scanner(file object pointing at file));
List<String> listOfLines = new ArrayList<String>();
while (s.hasNext()) {
   listOfLines.add(s.next());
}
s.close();

但是有多种方法可以使用 BufferedReaders 和其他 java 类来完成。听起来您问题的症结在于要使用什么数据结构。您应该使用一个列表,因为它会动态增长。除非您预先知道文件中的行数,否则数组不适合您

更新:

如果您想添加 val 和 freq,那么我将创建另一个类。

class StuffHolder {
   private final String val;
   private final String freq;

   public StuffHolder(String val, String freq) { 
      this.val = val;
      this.feq = freq;
   }
   //plus some getters

}

然后将您的列表更新为

List<StuffHolder> listOfLines = new ArrayList<StuffHolder>();

我相信你能想出一个比 StuffHolder 更好的名字;)

如果您正在尝试计算频率,那么如果 val 是键,则最好使用映射。Val 可能是映射中的键,然后您可以在每次找到 val 的实例时将该值加一

于 2013-03-08T16:31:12.803 回答