我正在编写一个程序,它将从命令行读取两个文件,并查找每个.txt文件中有多少个单词。我已经让我的代码工作,但我需要它将每个撇号计为2个单词,每个连字符计为两个单词。像这样的东西,例如,John将成为两个单独的单词“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的一些文档 王子
Nicolo Machiavelli由W. K.万豪翻译
Nicolo Machiavelli,1469年5月3日出生于佛罗伦萨。从1494年到1512年 在佛罗伦萨担任官方职务,其中包括外交使团 各种欧洲法院。 1512年在佛罗伦萨被监禁;后来放逐了 回到了圣卡夏诺。 1527年6月22日在佛罗伦萨去世。
引言
Nicolo Machiavelli于1469年5月3日出生于佛罗伦萨 Bernardo di Nicolo Machiavelli的第二个儿子,一位有名望的律师, 和他的妻子Bartolommea di Stefano Nelli。父母都是会员 佛罗伦萨的老贵族。
答案 0 :(得分:1)
String[] tokens = "abc-def".split("((?<=-)|(?=-))");
System.out.println(Arrays.toString(tokens));
<强>输出:强>
[abc, -, def]