Подсчет символов текста с несколькими строками - PullRequest
1 голос
/ 10 июля 2020

Есть такой текст:

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);
    }
}

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Новые строки могут быть представлены с помощью различных управляющих символов \ escape-последовательности. Ваш код не работает должным образом, поскольку он учитывает только \n, что означает перевод строки. Возврат каретки представлен \r. Вы можете исправить свой код, проверив также возврат каретки, изменив

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

на

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

Таким образом, вы обрабатывать как управляющие символы CR, так и LF. Если вам интересно узнать об этом больше, посмотрите эту статью в Википедии: https://en.wikipedia.org/wiki/Newline

0 голосов
/ 10 июля 2020

Для объявления разделителя строк предпочтительнее использовать System.lineSeparator(), потому что он отличается в разных ОС, и проверять пустую строку с помощью .trim()

Обновите условие до следующего:

From :

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

, Кому:

if (!"".equals(str.trim()) && !str.equals(System.lineSeparator()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...