我正在尝试创建一个采用文本文件并按字母顺序排列的代码。为此,我试图读取文件并将每个单词添加到数组中。我知道如何做到这一点,但不完全清楚。以下是我到目前为止的情况:
import java.io.*;
import java.util.Scanner;
public class assignment4 {
public static void main(String[] args) throws IOException {
if (args.length == 1){
createArray(args[0]);
System.exit(0);
}
}
public static String createArray(String fileName) {
File testFile = new File(fileName);
Scanner inputFile = new Scanner(testFile);
if (!testFile.exists()){
System.out.println("File Doesn't Exist");
System.exit(0);
}
String[] words;
while(inputFile.hasNext()){
for (int i=0;i<inputFile.length();i++){
words[i] = inputFile.nextLine();
}
}
return words[0];
}
}
我知道大多数人可能完全错了,但我现在已经困惑了4个小时......
答案 0 :(得分:2)
words[i] = inputFile.nextLine();
在这里,您尝试将输入文件中的下一行存储到i
数组的索引words
中。您尚未向i
声明或分配值,因此Java不会知道您要执行的操作。
对于标准数组,必须为它们分配一个初始数组值,该值由显式数量的“槽”(索引)组成。使用Scanner
,您可以通过全部读取并丢弃值来计算行数。拥有此计数器后,您可以使用适当的大小初始化String[]
。最后,您可以再次阅读它们并将它们存储到数组中。
int counter = 0;
while (inputFile.hasNext()) {
inputFile.nextLine();
counter++;
}
inputFile = new Scanner(testFile); //to get to the beginning of the file
String[] words = new String[counter];
for (int i = 0; i < counter; i++) {
words[i] = inputFile.nextLine();
}
这是非常糟糕的做法;阅读整个文件只是为了找到它的长度是一种矫枉过正,浪费资源。
因此,使用在将元素放入其中时自动扩展的集合类型会更好,例如ArrayList
。
ArrayList<String> lines = new ArrayList<String>();
while (inputFile.hasNext()) {
lines.add(inputFile.nextLine());
}
但是,您的作业很可能要求您同时使用Scanner
和标准String[]
。在这种情况下,您可以手动更改String[]
的大小:
String[] words = new String[0];
while (inputFile.hasNext()) {
words = Arrays.copyOf(words, words.length + 1);
words[words.length - 1] = inputFile.nextLine();
}
或
String[] words = new String[0];
while (inputFile.hasNext()) {
String temp = new String[words.length + 1];
System.arraycopy(words, 0, temp, 0, words.length);
temp[temp.length - 1] = inputFile.nextLine();
words = temp;
}
答案 1 :(得分:0)
ArrayList words = new ArrayList(); while(inputFile.hasNextLine()){ String word = inputFile.getNextLine(); 字词。(字); }
由于你不知道它有多大,你应该使用arrayList。然后,您可以按字母顺序或任何需要进行排序。