读取文件并将其转换为数组(Java)
因此,我有一个由新行分隔的短语集合,我想用这些短语填充一个数组。这就是我到目前为止所做的:读取文件并将其转换为数组(Java),java,Java,因此,我有一个由新行分隔的短语集合,我想用这些短语填充一个数组。这就是我到目前为止所做的: Scanner s; s = new Scanner(new BufferedReader(new FileReader("Phrases.txt"))); for(i = 0; i < array.length;i++) { s.nextLine() = array[i]; } s; s=新的扫描仪(新的BufferedReader(新的文件阅读器(“Phra
Scanner s;
s = new Scanner(new BufferedReader(new FileReader("Phrases.txt")));
for(i = 0; i < array.length;i++)
{
s.nextLine() = array[i];
}
s;
s=新的扫描仪(新的BufferedReader(新的文件阅读器(“Phrases.txt”));
对于(i=0;i
有没有一种简单快捷的方法可以用新行分隔的短语填充数组?你做错了。一定是这样
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.
for(i=0;i
然而,更好的选择是使用一个实现类的列表,比如ArrayList,它提供了动态大小的优势
List<String> list = new ArrayList<>();
list.add(s.nextLine(());
List List=new ArrayList();
添加(s.nextLine(());
分配应该是反向的:-
array[i] = s.nextLine();
而且,我认为您应该根据从文件接收到的输入来填充数组。这里,您是根据预先声明的数组的长度来接收输入。我的意思是,由于您使用的是数组
,因此您的大小是固定的。因此,您只能使用固定数量的短语填充它
更好的方法是使用
ArrayList
List<String> phrases = new ArrayList<String>();
使用while
循环读取,直到EOF
while (s.hasNextLine()) {
phrases.add(s.nextLine());
}
由于您不知道可能会有多少短语(我怀疑),我会填充
ArrayList
,并在完成后使用将其转换为数组。不过,为了更大的灵活性,我可能会将其作为Java集合保留。您将赋值操作倒置(array[I]
应设置为s.nextLine()
,而不是相反。此外,最好将for循环修改为在不再存在行时终止:
for(i = 0; i < array.length && s.hasNextLine() ;i++) {
array[i] = s.nextLine()
}
for(i=0;i
不要浪费时间在扫描仪上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]);
BufferedReader br=newbufferedreader(newfilereader(“Phrases.txt”));
LinkedList短语=新建LinkedList();
while(br.ready()){
短语。添加(br.readLine());
}
String[]phraseArray=phrases.toArray(新字符串[0]);
顺便说一句,如果文件很大,使用LinkedList
而不是ArrayList
是非常重要的。那样的话,你只能在最后创建一个数组。否则,你将有大量的大数组创建和内存浪费。可以使用带有
你知道你的这段代码没有填充任何数组吗?从未使用过BufferedReader.ready
。真的有这样一个名称的方法吗?我错过了吗?它确实存在!@durron597..Man..谢谢。我从来都不知道。实际上我主要使用扫描仪
。对于BufferedReader,我使用了null
检查readLine()
(这是被接受的答案?它不起作用,因为你不知道数组将有多大!而且它没有正确地参数化ArrayList
@durron597..实际上ArrayList
被正确地参数化了。只是它只在Java7
-(菱形操作符)中起作用它被称为。@durron597我很困惑。它不起作用,因为你不知道数组会有多大!
?这个答案中唯一错误的是dimond问题,它在java 7中会很好地工作。@durron597在这里更新你自己关于java 7中的钻石,我不认为每个人都在java 7上。还有您的代码没有为array
的值声明大小,因此如果文件太大,它将ArrayIndexOutOfBounds
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]);
FileUtils.readLines(myFile).toArray(new String[0]);