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