读取文件并将其转换为数组(Java)

时间:2012-11-14 17:21:48

标签: java

所以我有一个由换行符分隔的短语集合,我想用这些短语填充数组。这就是我到目前为止所做的:

   Scanner s;
   s = new Scanner(new BufferedReader(new FileReader("Phrases.txt")));
   for(i = 0; i < array.length;i++)
   {
   s.nextLine() = array[i];
   }

是否有一种快速而简单的方法来使用换行符分隔的短语填充数组?

6 个答案:

答案 0 :(得分:4)

作业应该是相反的: -

array[i] = s.nextLine();

而且,我认为你应该根据从文件中收到的输入来填充你的数组。在这里,您将根据预先声明的数组的长度接收输入。我的意思是,因为你使用array,你的尺寸是固定的。因此,您只能使用固定数量的短语填充它。


更好的方法是使用ArrayList

List<String> phrases = new ArrayList<String>();

现在,您可以根据从文件中获得的短语填充您的arraylist。您无需预先定义大小。它动态地增加了尺寸。

要添加短语,您可以: -

phrases.add(s.nextLine());

使用while循环读取EOF

while (s.hasNextLine()) {
    phrases.add(s.nextLine());
}

答案 1 :(得分:1)

由于你不知道你可能有多少短语(我怀疑),我会填充ArrayList<String>并在你完成后使用ArrayList.toArray()将其转换为数组。但是,为了获得更大的灵活性,我可能会将它保留为Java集合。

答案 2 :(得分:1)

您的赋值操作已被反转(array[i]应该设置为s.nextLine(),而不是相反。此外,最好修改for循环以在不再存在行时终止:

for(i = 0; i < array.length && s.hasNextLine() ;i++) {
     array[i] = s.nextLine()
}

答案 3 :(得分:1)

不要在Scanner上浪费时间。 BufferedReader很好。试试这个:

BufferedReader br = new BufferedReader(new FileReader("Phrases.txt")));
LinkedList<String> phrases = new LinkedList<String>();
while(br.ready()) {
    phrases.add(br.readLine());
}
String[] phraseArray = phrases.toArray(new String[0]);

顺便说一下,如果文件很大,使用LinkedList而不是ArrayList 重要。这样你最后只创建一个数组。否则你将会有大量的数组创建和内存浪费。

答案 4 :(得分:1)

可以使用带有apache commons且具体为FileUtils.readLines()

的1个衬垫来完成
FileUtils.readLines(myFile).toArray(new String[0]);

答案 5 :(得分:0)

你做错了。它必须是

for(i = 0; i < array.length;i++)
   {
   array[i]=s.nextLine();
   }

array[i] = value; // the value would be assigned into the array at index i.

但是,更好的选择是使用List实现类,例如ArrayList,它可以为您提供动态大小的优势。

 List<String> list = new ArrayList<>();
 list.add(s.nextLine(());