导入文本文件和加倍数组

时间:2014-11-20 19:44:48

标签: java arrays import

我试图编写一种导入大量单词的文本文件的方法,然后找到一定长度的单词并将其打印出来。 我不是在寻找代码,而是在澄清我是否正确地理解了我想要完成的事情。

所以,我将使用throw异常导入文本,并获取特定单词的字母数:

public static void name(int size) throws Exception{
Scanner inputFile = new Scanner(new File("2of12inf.txt"));

然后创建一个新的数组列表:

int[] list = new int[MAX_SIZE]; //MAX_SIZE is initially a small number, say 100
int listSize = 0;

如果单词列表的大小超过我的MAX_SIZE数组,那么我将复制现有数组并将其加倍,以使单词的数量适合列表。

if (listSize == list.length)
{
  int[] temp = new int [2*list.length];
  for(int i = 0; i < list.length; i++){
    temp[i] = list[i];}
  list = temp;
}
list[listSize] = size;
listSize++;

inputFile.close();}

这是我对如何编写方法的原始理解,这是正确的思考,只是能够阅读单词并列出它们吗?

编辑:对不起,我没有提到我不使用ArrayLists。

1 个答案:

答案 0 :(得分:0)

如果您在运行程序之前知道自己感兴趣的长度,则只需在迭代单词时保存这些单词即可。

像这样我的意思是:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.SortedSet;
import java.util.TreeSet;

public class WordLengthPrinter {
    public static void main(String[] args) throws Exception {
        if (args.length != 2)
            throw new IllegalArgumentException("Specify filename as first parameter. Word length is second.");

        final String fileName = args[0]; // file name is first input argument
        final int wordLength = Integer.parseInt(args[1]); // the desired wordlength is second argument

        // lets store the words of correct size in a sorted set
        SortedSet<String> wordsOfDesiredLength = new TreeSet<String>();

        // read file line by line while checking word lengths and only store words of correct length
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)))) {
            String line = null;
            while ( (line = reader.readLine()) != null) {
                if (line.length() == wordLength) wordsOfDesiredLength.add(line);
            }
        }

        // print resulting words
        for (String word : wordsOfDesiredLength) {
            System.out.println(word);
        }
    }
}