Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算从文件转换为字符串的字数_Java_Io - Fatal编程技术网

Java 计算从文件转换为字符串的字数

Java 计算从文件转换为字符串的字数,java,io,Java,Io,我试图计算通过字符串传递的文件中的字数。我还显示字符串,以确保输出正确,并获得文件的确切内容 但是,我的字数计算方法将前一行的最后一个字和下一行的第一个字计算为一个字 示例:“测试字(换行符)测试字”输出为“测试字测试字” 尝试将“\n”添加到我的代码中,它现在显示正确的输出,但仍像以前一样计数 任何帮助都将不胜感激。您可以更改检查空格的条件,以包括新行 if ((line.charAt(i) == ' ' || line.charAt(i) == '\n') && line.c

我试图计算通过字符串传递的文件中的字数。我还显示字符串,以确保输出正确,并获得文件的确切内容

但是,我的字数计算方法将前一行的最后一个字和下一行的第一个字计算为一个字

示例:“测试字(换行符)测试字”输出为“测试字测试字”

尝试将“\n”添加到我的代码中,它现在显示正确的输出,但仍像以前一样计数


任何帮助都将不胜感激。

您可以更改检查空格的条件,以包括新行

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

也可以更改检查空格以包含新行的条件

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

您还可以使用正则表达式进行计数

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;

    }

您还可以使用正则表达式进行计数

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;

    }
下面是为什么“测试词(新行)测试词”输出为“测试词测试词”的原因

in.nextLine()将行作为字符串返回,不包括行尾的换行符。看

不过,更有效的方法是跟踪字数,而不是将行追加到字符串,然后在末尾计数。伪代码如下所示:

int wordCount = 0
while (file has more lines) {
    line = line.trim()
    int wordsOnLine = numberOfSpacesPlusOne(line)
    wordCount += wordsOnLine
}
下面是为什么“测试词(新行)测试词”输出为“测试词测试词”的原因

in.nextLine()将行作为字符串返回,不包括行尾的换行符。看

不过,更有效的方法是跟踪字数,而不是将行追加到字符串,然后在末尾计数。伪代码如下所示:

int wordCount = 0
while (file has more lines) {
    line = line.trim()
    int wordsOnLine = numberOfSpacesPlusOne(line)
    wordCount += wordsOnLine
}
你为什么不干脆

String sentence = "This is a sentence.";
String[] words = sentence.split(" ");
System.out.println(words.length);
在“”处拆分字符串并数一数单词。

为什么不直接

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


在“”处拆分字符串并计算单词数。

countWords
方法中,只有在看到空格时才增加计数。看到换行符(
\n
)时也要增加计数。另一种方法是假设这不是赋值,也可以使用String#split方法将换行符拆分为标记并计数。(
line.split(\\b”);
)。您还可以使用
line.charAt(i).isWhitespace()
检测多种类型的空格(换行符、制表符等)。本主题将帮助您计算文件中的字数。在
countWords
方法中,只有在看到空格时才增加计数。看到换行符(
\n
)时也要增加计数。另一种方法是假设这不是赋值,也可以使用String#split方法将换行符拆分为标记并计数。(
line.split(\\b”);
)。您还可以使用
line.charAt(i).isWhitespace()
检测多种类型的空格(换行符、制表符等)。本主题将帮助您计算文件中的字数。尽管最后一个单词可能不被计数或“\n\n\n”会导致多个错误,但这种情况下仍有一个错误words@toongeorges这就是为什么OPs解决方案从1开始计数,而不是0。但是,如果文本仅由一个单词后跟一个空格组成,我认为trick/hack可能会产生不正确的计数。@David Choweller你是对的,但是,当最后一个字符是空格或新行,而最后一个字符是新行时,代码对一个单词的计数过多line@toongeorges正确。尽管最后一个单词可能不被计数或“\n\n\n”会导致多个错误,但这种情况下仍有一个错误words@toongeorges这就是为什么OPs解决方案从1开始计数,不是0。但是,如果文本仅由一个单词后跟一个空格组成,我想trick/hack可能会产生不正确的计数。@David Choweller你是对的,但是,当最后一个字符是空格或新行,而最后一个字符是新行时,代码对一个单词的计数过多line@toongeorges正确。很抱歉忘记提及它是用于分配的,我们需要将其传递到字符串中。没问题:)您可能希望使用StringBuilder而不是字符串。每次执行字符串连接(行+=…)时,都会创建一个新字符串。您的代码与StringBuilder类似:
StringBuilder line=new StringBuilder();int行=0;而(in.hasNextLine()){lines++;line.append(“\n”).append(in.nextLine());}。。。int words=countWords(line.toString())感谢您的输入。比您想象的更能帮助我完成这个类:)抱歉,忘了提到它是用于作业的,我们需要将它传递到字符串中。没问题:)您可能希望使用StringBuilder而不是字符串。每次执行字符串连接(行+=…)时,都会创建一个新字符串。您的代码与StringBuilder类似:
StringBuilder line=new StringBuilder();int行=0;而(in.hasNextLine()){lines++;line.append(“\n”).append(in.nextLine());}。。。int words=countWords(line.toString())感谢您的输入。我刚刚添加了一个类似的答案,但你的答案更为优雅。我尝试了你的代码,但多返回了一个单词,但不知道为什么。(你不必回答,我找到了另一个解决方案)。我刚刚添加了一个类似的答案,但你的答案更优雅。我尝试了你的代码,但多返回了一个单词,不知道为什么。(你不必回嘴,我找到了另一个解决办法)。