繁体   English   中英

计算文件中的单词

[英]Counting words from a file

对于该程序,我必须编写一个具有一行(或多行)文本的字符串输入文件,例如:“ High HIGH cat High jumped(WOW 6SOFT)”。 在这一行中,我必须扫描文件,计算单词出现的次数(不考虑大小写),然后将其输出到格式化的文件中。 如果数字出现在单词之前,则该单词不计算在内。 格式必须以在三个空格中对正的计数正确性开头,然后是另一个空格,然后是小写的单词。

package InClass;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;


public class CountWords {
public static void main(String[] args) {
    try {
        File inputFile = new File("input.txt");
        Scanner scanner = new Scanner(inputFile);
        File outputFile = new File("output.txt");
        PrintWriter writer = new PrintWriter(outputFile);

        boolean next = scanner.hasNext();
        ArrayList<String> inputWords = new ArrayList<String>();
        ArrayList<String> outputWords = new ArrayList<String>();

        while (next) { // Adds all the strings to an array list
            inputWords.add(scanner.next());
            for (int i = 0; i < inputWords.size(); i++) {
                inputWords.get(i).toLowerCase();
            }
        }
        while (next) {
            for (int i = 0; i < inputWords.size(); i++) {
                String word = inputWords.get(i);
                int count = 1;
                if (!Character.isDigit(word.charAt(0))) {
                    outputWords.add(inputWords.get(i));
                    if (outputWords.contains(word)) {
                        count++;
                    }
                } else {
                    inputWords.remove((i));
                }
                for (int j = 0; i < outputWords.size(); j++) {
                    word = outputWords.get(i);
                    writer.printf("%3s" + "%1s\n", count, word);
                }
            }
        }
        scanner.close();
        writer.close();
    } catch (FileNotFoundException e) {
    }
}
}

我的测试器文件给我一个错误,指出仅一个测试器类存在NoSuchElementException,该类正在测试两个单词。 这是给出错误的测试类”

@Test
public void testTwoWords() {
    try {
        File inputFile = new File(INPUT);
        File outputFile = new File(OUTPUT);

        // If assert fails it is (usually) because the file was (wrongly)
        // left open in an earlier run.
        // Using a file manager application (e.g. explorer), go to project
        // directory and delete it.
        // Make sure that your program closes these files before ending.
        if (inputFile.exists()) {
            assertTrue("Your program left \"" + INPUT
                    + "\" open in a previous test.", inputFile.delete());
        }
        if (outputFile.exists()) {
            assertTrue("Your program left \"" + OUTPUT
                    + "\" open in a previous test.", outputFile.delete());
        }

        // create INPUT file
        PrintWriter input = new PrintWriter(inputFile);
        input.println("King");
        input.println("");
        input.println("");
        input.println("");
        input.println("hill");
        input.close();

        // invoke program
        CountWords.main(null);

        // verify OUTPUT file exists and is empty
        assertTrue("Output file doesn't exist", outputFile.exists());
        Scanner output = new Scanner(outputFile);
        String actual = output.nextLine();
        assertEquals("Incorrect result", "  1 king", actual);
        actual = output.nextLine();
        assertEquals("Incorrect result", "  1 hill", actual);
        assertFalse("There should be no more data", output.hasNext());
        output.close();

        // delete I/O files
        assertTrue("Input file could not be deleted", inputFile.delete());
        assertTrue("Output file could not be deleted", outputFile.delete());
    } catch (IOException e) {
        fail("No exception should be thrown");
    }

}

最后,我的其他测试人员都说“您的程序在先前的测试中未打开“ input.txt”。 知道为什么吗? 预先感谢您吨!

您的outputWords的for循环使用的是i循环计数器,而不是j。

for (int j = 0; i < outputWords.size(); j++) {
                    word = outputWords.get(i);
                    writer.printf("%3s" + "%1s\n", count, word);
                }

更改为

for (int j = 0; i < outputWords.size(); j++) {
                    word = outputWords.get(j);//NEED TO USE J HERE
                    writer.printf("%3s" + "%1s\n", count, word);
                }

其他测试失败的原因是,显然应该在每个测试运行后删除输出文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM