Как подсчитать количество символов в файле с помощью сканера и вывести его? - PullRequest
0 голосов
/ 13 октября 2018

В настоящее время я работаю над программой и не могу понять, почему всякий раз, когда я печатаю длину, она не выводит правильное число.Прописные и строчные буквы работают правильно.

Пример ввода:

I

Любовь

Программирование

Выход будет тогда:

Количество символов - 16.

Количество букв в нижнем регистре - 13.

Количество букв в верхнем регистре - 3.

public static void main(String[] args) throws IOException 
    {
    int lowercase = 0;
    int uppercase = 0;
    int length = 0;
    File file1 = new File("input.txt");
    Scanner scanner = new Scanner(file1);
    while(scanner.hasNext())
    {
    String s = scanner.nextLine();
    length = s.length();
    char[] charAnalysis = s.toCharArray();
    for (char element : charAnalysis) 
    {
        if (Character.isUpperCase(element)) 
        {
            uppercase++;
        }
        else if (Character.isLowerCase(element)) 
        {
            lowercase++;
        }
        length = s.length();
    }
    }
    File file2 = new File("output.txt");
        try (PrintStream ps = new PrintStream(file2)) 
        {
            ps.println("Number of characters is " + length);
            ps.println("Number of lower case letters is " + lowercase);
            ps.println("Number of upper case letters is " + uppercase);   
        }
        catch(IOException e) 
        { 

        }
    }
}

1 Ответ

0 голосов
/ 13 июня 2019

В каждом цикле вы перезаписываете переменную длины длиной текущей строки.То, что вы должны изменить, это добавить длину текущей строки к вашему итогу.Поэтому удалите оба ваших length = s.length(); и замените их одним оператором length += s.length();.Я предполагаю, что вы не хотите считать символы новой строки.Смотрите код ниже:

public static void main(String[] args) throws IOException {
    int lowercase = 0;
    int uppercase = 0;
    int length = 0;
    File file1 = new File("input.txt");
    Scanner scanner = new Scanner(file1);
    while (scanner.hasNext()) {

      String s = scanner.nextLine();
      length += s.length();
      System.out.println("new length = " + length);
      char[] charAnalysis = s.toCharArray();
      for (char element : charAnalysis) {
        if (Character.isUpperCase(element)) {
          uppercase++;
        }
        else if (Character.isLowerCase(element)) {
          lowercase++;
        }
      }
    }
    File file2 = new File("output.txt");
    try (PrintStream ps = new PrintStream(file2)) {
      ps.println("Number of characters is " + length);
      ps.println("Number of lower case letters is " + lowercase);
      ps.println("Number of upper case letters is " + uppercase);
    }
    catch (IOException e) {
      System.out.println(e.getMessage());
    }
  }
...