Java从带有撇号和连字符的文件中读取单词并将它们计为2个单词

标签 java text-files java.util.scanner words

我正在编写一个程序,该程序将从命令行读取两个文件并查找每个 .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 的一些文档 王子

作者:尼科洛·马基雅维利

由 W.K. Marriott 翻译

尼科洛·马基雅维利 (Nicolo Machiavelli),1469 年 5 月 3 日出生于佛罗伦萨。从 1494 年到 1512 年 在佛罗伦萨担任过正式职务,其中包括外交使团 各个欧洲法院。 1512 年在佛罗伦萨被监禁;后来被流放和 回到圣卡夏诺。 1527 年 6 月 22 日逝世于佛罗伦萨。

简介

尼科洛·马基雅维利 (Nicolo Machiavelli) 于 1469 年 5 月 3 日出生于佛罗伦萨。 贝尔纳多·迪·尼科洛·马基雅维利的次子,一位颇有名气的律师, 以及他的妻子巴托洛梅亚·迪·斯特凡诺·内利。 parent 双方都是成员(member) 古老的佛罗伦萨贵族。

最佳答案

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

输出:

[abc, -, def]

关于Java从带有撇号和连字符的文件中读取单词并将它们计为2个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703160/

相关文章:

java - 卡夫卡流 : Implement a simple KeyValueStore where I can put and get data

java - 重用部分代码

java - 自定义权限评估器 Spring

python - 如何在Python中垂直对齐数据?

java - 无缓存控制 header 的 Varnish 行为

python - 删除文本文件中的行

python - 在固定宽度文本文件中的多个位置添加分隔符时出现问题

读取文件时出现 java.util.NoSuchElementException(扫描仪)

java - Codeabbey 中的元音计数

java - 扫描仪+开关使用