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