所以我有一个由换行符分隔的短语集合,我想用这些短语填充数组。这就是我到目前为止所做的:
Scanner s;
s = new Scanner(new BufferedReader(new FileReader("Phrases.txt")));
for(i = 0; i < array.length;i++)
{
s.nextLine() = array[i];
}
是否有一种快速而简单的方法来使用换行符分隔的短语填充数组?
答案 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()
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(());