[英]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.