3

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

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

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

4

6 回答 6

4

分配应该是相反的: -

array[i] = s.nextLine();

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


更好的方法是使用ArrayList.

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

现在,您可以根据从文件中获得的短语来填充您的数组列表。您不需要预先定义大小。它的大小动态增加。

要添加短语,您可以:-

phrases.add(s.nextLine());

使用while循环读取直到EOF.

while (s.hasNextLine()) {
    phrases.add(s.nextLine());
}
于 2012-11-14T17:25:07.050 回答
1

因为你不知道你可能有多少个短语(我怀疑),所以一旦你完成,我会使用ArrayList.toArray()ArrayList<String>填充一个并将其转换为一个数组。不过,为了更大的灵活性,我可能会将其保留为 Java 集合。

于 2012-11-14T17:25:09.970 回答
1

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

for(i = 0; i < array.length && s.hasNextLine() ;i++) {
     array[i] = s.nextLine()
}
于 2012-11-14T17:27:47.397 回答
1

不要浪费你的时间ScannerBufferedReader很好。试试这个:

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]);

顺便说一句,如果文件很大,则不要使用它很重要。这样你最后只创建一个数组。否则,您将创建大量大型数组并浪费内存。LinkedListArrayList

于 2012-11-14T17:28:33.710 回答
1

它可以用 1 班轮和apache commons来完成,特别是FileUtils.readLines()

FileUtils.readLines(myFile).toArray(new String[0]);
于 2012-11-14T17:30:15.860 回答
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(());
于 2012-11-14T17:24:56.133 回答