所以我有一组用换行符分隔的短语,我想用这些短语填充一个数组。这是我到目前为止所拥有的:
Scanner s;
s = new Scanner(new BufferedReader(new FileReader("Phrases.txt")));
for(i = 0; i < array.length;i++)
{
s.nextLine() = array[i];
}
有没有一种快速简单的方法来填充一个用换行符分隔的短语的数组?
所以我有一组用换行符分隔的短语,我想用这些短语填充一个数组。这是我到目前为止所拥有的:
Scanner s;
s = new Scanner(new BufferedReader(new FileReader("Phrases.txt")));
for(i = 0; i < array.length;i++)
{
s.nextLine() = array[i];
}
有没有一种快速简单的方法来填充一个用换行符分隔的短语的数组?
分配应该是相反的: -
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());
}
因为你不知道你可能有多少个短语(我怀疑),所以一旦你完成,我会使用ArrayList.toArray()ArrayList<String>
填充一个并将其转换为一个数组。不过,为了更大的灵活性,我可能会将其保留为 Java 集合。
您将赋值操作反转 (array[i]
应该设置为s.nextLine()
,而不是相反。此外,最好修改 for 循环以在不再存在行时终止:
for(i = 0; i < array.length && s.hasNextLine() ;i++) {
array[i] = s.nextLine()
}
不要浪费你的时间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
它可以用 1 班轮和apache commons来完成,特别是FileUtils.readLines()
FileUtils.readLines(myFile).toArray(new String[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(());