需要将文本文件中的每个字符串放入数组中

时间:2013-10-13 00:57:49

标签: java

我正在尝试创建一个采用文本文件并按字母顺序排列的代码。为此,我试图读取文件并将每个单词添加到数组中。我知道如何做到这一点,但不完全清楚。以下是我到目前为止的情况:

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个小时......

2 个答案:

答案 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。然后,您可以按字母顺序或任何需要进行排序。