0

我正在编写一个程序,它将从命令行读取两个文件并查找每个 .txt 文件中有多少个单词。我的代码可以正常工作,但是我需要将每个撇号计为 2 个单词,将每个连字符计为两个单词。例如,John's 将变成两个单独的单词“john”和“s”,而 Tick-Tock 将变成“tick”和“tock”)。我也不能使用 util.regex。这是我的代码”

private void readFile(){
    Scanner scanner = null;
    try {
        scanner = new Scanner(file);
        while (scanner.hasNextLine()){

            String line = scanner.nextLine();
            String[] wordOfLine = line.split("\\W");
            lineNum++;//accumulate line

            //counts all words 
            for (String word : wordOfLine){

                if (word.equals("") || !(isWord(word)))
                    continue;
                words.add(word.toLowerCase());
                if (wordNum + 1 > wordNum){//in case of overflow
                    wordNum++;//accumulate word
                }

                else
                    throw new Error(" word number overflow!");

            }
        }
    } catch (FileNotFoundException e) {
        throw new Error("cannot find file!");
    } finally{
        if (scanner != null)
            scanner.close();
    }
    System.out.println("Test for wordNum "+wordNum); 

}


//check if text is word
private boolean isWord(String text) {
    return text.matches("[a-zA-Z]+");
}

例如,这是我的测试最终结果:

测试 wordNum 54

测试 wordNum 49516

文件 f1:9 行,54 个单词,38 个不同的单词

文件 f2:4666 行,49516 个字,5103 个不同的字

f1 与预期结果匹配良好,但 f2 需要像这样

文件 f2:4666 行,49714 个字,5216 个不同的字

这是 f2 THE PRINCE 的一些文件

尼科洛·马基雅维利

由 WK 万豪翻译

尼科洛·马基雅维利(Nicolo Machiavelli),1469 年 5 月 3 日出生于佛罗伦萨。从 1494 年到 1512 年,他在佛罗伦萨担任官方职务,其中包括前往各个欧洲法院的外交使团。1512 年被囚禁在佛罗伦萨;后来流放并返回圣卡夏诺。1527 年 6 月 22 日死于佛罗伦萨。

介绍

尼科洛·马基雅维利于 1469 年 5 月 3 日出生于佛罗伦萨。他是著名律师贝尔纳多·迪尼科洛·马基雅维利和他的妻子巴托洛梅亚·迪·斯特凡诺·内利的次子。父母双方都是旧佛罗伦萨贵族的成员。

4

1 回答 1

1
String[] tokens = "abc-def".split("((?<=-)|(?=-))");
System.out.println(Arrays.toString(tokens));

输出:

[abc, -, def]
于 2013-09-09T17:04:56.067 回答