Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用BufferedReader计算文件行总数_Java_Arrays_Bufferedreader - Fatal编程技术网

Java 使用BufferedReader计算文件行总数

Java 使用BufferedReader计算文件行总数,java,arrays,bufferedreader,Java,Arrays,Bufferedreader,因此,基本上,我试图将一个文件中保存的几个数据保存到一个数组中,因此我需要以某种方式获得数组必须初始化到的大小 有没有办法不创建另一个循环来计算所有的行,直到读取行为空?因为这将需要稍后重新打开文件,这将不是非常理想的。我正努力使它尽可能紧凑 另外,不,我不能使用ArrayList。如果您事先知道将有多少行,那么您需要在循环之前创建数组,然后需要一个计数器,您可以使用该计数器在数组中创建索引。每次通过循环时递增计数器 如果行数可变,则将行添加到循环中的ArrayList,然后将ArrayList

因此,基本上,我试图将一个文件中保存的几个数据保存到一个数组中,因此我需要以某种方式获得数组必须初始化到的大小

有没有办法不创建另一个循环来计算所有的行,直到读取行为空?因为这将需要稍后重新打开文件,这将不是非常理想的。我正努力使它尽可能紧凑


另外,不,我不能使用ArrayList。

如果您事先知道将有多少行,那么您需要在循环之前创建数组,然后需要一个计数器,您可以使用该计数器在数组中创建索引。每次通过循环时递增计数器


如果行数可变,则将行添加到循环中的ArrayList,然后将ArrayList转换为循环后的数组

我会选择ArrayList,如Haroon和气垫船

但是,如果不是一种选择,为什么不:

// 1. Create a new Set of String
Set<String> stringSet = new HashSet<String>();
// 2. Loop through bufferedReader and add lines to set
for (String line = br.readLine(); line != null; line = br.readLine()) {
stringSet.add(line);
}
// 3. Copy set to a new array
int n = stringSet.size(); 
String array[] = new String[n]; 
array = stringSet.toArray(array);

但是不要期望有巨大的性能。

为什么不简单地创建一个相当大的数组,并开始向其中添加数据呢。如果数据大小大于数组,则执行ArrayList所做的操作-创建一个更大的备份数组并将数据复制到其中。@HoverCraftFullOfels,因为这将导致大量未使用和浪费的内存,这不是一个好的做法。只是为了让我们提前知道所有奇怪的限制,还有什么是您不能使用的?恰恰相反。它会在需要的时间和地点为您提供足够的内存。否则,您需要对文件进行两次读取,一次读取行数,然后创建数组,然后再次将它们添加到数组中。哪一个开销更大?在内存中创建插槽或物理读取和重新读取文件?为什么不?1,因为它将使用比仅使用ArrayList多得多的内存。2因为重复的行将丢失。3因为行将被重新排序。如果OP不能使用列表,他们可能不能使用SetSeems,确实有一些很好的理由不这样做!