2017-03-08 57 views
1

我试图计算通过字符串传递的文件中的字数。我也显示字符串,以确保输出是正确的,我得到的确切内容的文件。计算从文件转换为字符串的字数

但是,我的字数统计方法将上一行的最后一个单词和下一行的第一个单词统计为一个单词。

实施例:“测试字(行)的测试词语”输出作为“测试wordtest词语”

尝试添加“\ n”来我的代码和它现在显示正确的输出但正如前面仍计数它。

任何帮助,将不胜感激。

+1

在你的'countWords'方法中,当你看到空格时,你只会增加计数。当你看到换行符('\ n')时,增加计数。 –

+1

另一种方法是使用[BreakIterator](https://docs.oracle.com/javase/7/docs/api/java/text/BreakIterator.html) – Sanjeev

+0

假设这不是一项任务,您也可以使用String#split方法将行分割为标记并对它们进行计数。 ('line.split( “\\ B”);')。 –

回答

2

您可以更改检查空间,包括新太行

if ((line.charAt(i) == ' ' || line.charAt(i) == '\n') && line.charAt(i + 1) != ' ') 
+0

虽然最后一个字可能不计算或“\” n \ n \ n \ n“导致多个单词 – toongeorges

+0

@toongeorges这就是为什么OPs解决方案在1开始计数而不是0. –

+0

但是,如果文本只包含一个字符,我认为trick/hack可能会产生不正确的计数字跟一个空格。 –

0

您还可以使用正则表达式计算的条件。

public static int countWords(String line) { 

    Pattern pattern = Pattern.compile("\\w+"); 
    Matcher matcher = pattern.matcher(line); 

    int count = 0; 
    while (matcher.find()) 
     count++; 

    return count; 

    } 
2
/* * Counting number of words using regular expression. */ 
public int countWord(String word) { 
    return word.isEmpty() ? 0 : word.split("\\s+").length; 
} 
+0

我刚刚添加了一个类似的答案,但你的更优雅 –

+0

我试过你的代码,但得到1额外的单词返回并不知道为什么。 (你不必回答我发现了另一个修复)。 – Levy

+0

也许word.trim()可以解决? –

0

这也是为什么“测试字(行)的测试词”输出为“测试wordtest话”

in.nextLine()返回不包括换行字符在该行作为一个String的原因队伍的尽头。请参阅https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#nextLine--

尽管追踪字数而不是追加字符串到字符串然后在最后计数会更有效。伪代码将是这样的:

int wordCount = 0 
while (file has more lines) { 
    line = line.trim() 
    int wordsOnLine = numberOfSpacesPlusOne(line) 
    wordCount += wordsOnLine 
} 
+0

抱歉忘了提及它是为了一个任务,我们需要将它传递给一个字符串。 – Levy

+1

没问题:)你可能想使用StringBuilder而不是String。每次执行字符串连接(行+ = ..)时,都会创建一个新的字符串。你的代码就像这样一个StringBuilder: 'StringBuilder line = new StringBuilder(); int lines = 0; (in.hasNextLine()){ lines ++; line.append(“\ n”)。append(in.nextLine()); } ... int words = countWords(line.toString());' – Joe

+1

感谢您的输入。帮助我通过这个课程比你想象的更多:) – Levy

0

你为什么不只是

String sentence = "This is a sentence."; 
String[] words = sentence.split(" "); 
System.out.println(words.length); 

分割你的字符串在“”和算的话。