繁体   English   中英

计算多行文本的字符数

[英]Counting the characters of a text with multiple lines

有一段文字是这样的:

hi hi
hi hi
hi hi

该程序应该找到 12 个字符,但它会打印 14 个字符。我为我的问题找到了不同的解决方案,但我不明白为什么这段代码不起作用:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

public class Learn {
    public static void main(String[] args) throws FileNotFoundException {
        // variables
        String inName;
        File input;
        int counter;
        String str;

        // program code
        // #1 How many characters
        Scanner scan = new Scanner(System.in);
        System.out.print("Please enter the file name: ");
        inName = scan.nextLine();
        input = new File(inName);
        scan.close();
        scan = new Scanner(input);
        scan.useDelimiter("");
        counter = 0;
        while (scan.hasNext()) {
            str = scan.next();
            if (!str.equals(" ") && !str.equals("\n"))
                counter++;
        }
        System.out.println(counter);
    }
}

最好使用System.lineSeparator()来声明行分隔符,因为它在不同的操作系统中是不同的,并使用.trim()检查空字符串

将条件更新为以下内容:

从:

if (!str.equals(" ") && !str.equals("\n"))

, 至:

if (!"".equals(str.trim()) && !str.equals(System.lineSeparator()))

可以使用不同的控制字符 \ 转义序列来表示新行。 您的代码无法正常工作,因为它只考虑\n表示换行符。 回车由\r表示。 您可以通过检查回车来修复您的代码,也可以通过更改

if (.str.equals(" ") && !str.equals("\n") )

if (.str.equals(" ") &&.str.equals("\n") && !str.equals("\r") )

这样,您将同时处理 CR 和 LF 控制字符。 如果您有兴趣了解有关此的更多信息,请查看此 Wikipedia 文章: https://en.wikipedia.org/wiki/Newline

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM