簡體   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