有人可以帮助我理解这段代码

时间:2015-03-30 14:30:39

标签: java

我很快就会完成一项任务,但我仍然是Java的新手,只知道基础知识。无论如何,我必须创建一个文本分析器,通过它可以计算我读过的文档的字数,字符和行数。

我在下面找到了这段代码并且我已经开始对它进行评论,但我不知道我的评论是否正确,而且我不确定未注释的部分是做什么的。如果有人可以为我写一些简短的解释,或者我会非常感激。

    //Loops through the file until it has counted everything. 
     while (in.hasNext()) {
        String tmpStr = in.nextLine();
        if (!tmpStr.equalsIgnoreCase("")) {
            String replaceAll = tmpStr.replaceAll("\\s+", "");
            // Counts the number of characters within the file.
            charsCount += replaceAll.length();
            // Counts the number of words within the file.
            wordsCount += tmpStr.split(" ").length;
        } 
        // Counts number of lines
        ++linesCount;
     } //Ends While Loop. 

我假设在代码计算字符的地方它忽略了空格,我会改变什么以便它也计算空格。

你们都帮忙了,我的工作让我现在了解得更多,足以做出改变,我希望我可以选择你们所有人来解决我的答案,再次感谢:)

4 个答案:

答案 0 :(得分:1)

你似乎拥有大部分内容。我将尝试详细解释每个方面。

while (in.hasNext()) {
  ...
}

这是主循环。它只是测试您正在阅读的输入中是否还有其他内容。如果有,则执行大括号之间的代码。

String tmpStr = in.nextLine();

从扫描仪读取下一行并将其分配给tmpStr。这里有一个小问题。 nextLine()不返回回车符或换行符。如果您应该将这些作为项目中的字符计数,那么您的计数将会被取消。

if (!tmpStr.equalsIgnoreCase("")) {
  ...
}

此if语句检查它是否只是一个空行(即没有字符),如果是,则跳过处理该行。这是一项优化,并非严格要求实现您的目标。

String replaceAll = tmpStr.replaceAll("\\s+", "");

这是一个正则表达式调用。它从行中删除所有空格并将其存储为临时变量。空格包括空格,制表符,垂直制表符,换页符,回车符等字符。除非您的问题以不需要计算空格的方式定义,否则几乎肯定不希望这样做。如果问题需要字符数(空白和所有)并且您的输入保证是ASCII,那么计算字符的最简单的解决方案是返回文件大小,因为1个字符= ASCII字节中的1个字节。否则问题会变得有点毛茸茸。如果你提供了为项目目的定义角色的内容,我可以在这里提供更好的指导。

charsCount += replaceAll.length();

这会保留所看到的非空白字符的数量。 + =运算符获取之前charsCount的值,并在删除空格后添加字符行的长度。

wordsCount += tmpStr.split(" ").length;

Split接受一个字符串并返回一个由所提供的字符拆分的子字符串数组。在这种情况下,角色是空间。因此,“快速棕色狐狸”系列将返回四个项目“The”,“quick”,“brown”和“fox”的数组。请注意,空格被删除。然后将数组的长度添加到正在进行的单词计数中。这是一种相当天真的计算单词的方法,因为有些单词边界不是空格。这包括tab,em dashes等等。这可能适用于您的目的,但它将取决于您项目的参数。

++linesCount;

这会对行进行计数。 ++只是意味着“加1”变量。因此,对于while循环的每次迭代,linesCount将增加一个。

答案 1 :(得分:0)

更多评论:

// Get the next line from the input
String tmpStr = in.nextLine();
// If the line is not empty ...
if (!tmpStr.equalsIgnoreCase("")) {
  // Remove all whitespace from the line
  String replaceAll = tmpStr.replaceAll("\\s+", "");

答案 2 :(得分:0)

我尝试通过几个步骤解释代码是如何工作的

  1. 只要你的" in"有更多的值,临时字符串从你的in中取一行。这是一个循环,只要你的值有,就会执行。
  2. 如果临时String不为空("" =空字符串),则字符数将按临时字符串的长度(字符数)计数,例如:String& #34;你好"包含5个字符。
  3. wordcounts分为1个空格("")。这使你的String成为一个单词集合。该行中的单词数将添加到全局变量wordsCount。
  4. 最后行数为numberd + 1(++ LinesNumber)所以你也知道有多少行。
  5. 希望这能使事情变得清晰

答案 3 :(得分:0)

如果你想计算包括空格在内的所有字符,你需要删除replaceAll,然后计算行字符,然后计算字数

//Loops through the file until it has counted everything. 
 while (in.hasNext()) {
    String tmpStr = in.nextLine();
    if (!tmpStr.equalsIgnoreCase("")) {
        // Counts the number of characters within the file.
        charsCount += tmpStr.length();
        // Counts the number of words within the file.
        wordsCount += tmpStr.split(" ").length;
    } 
    // Counts number of lines
    ++linesCount;
 } //Ends While Loop.