Счетчик слов и строк из пользовательского ввода для Java - PullRequest
1 голос
/ 26 февраля 2020

Я сделал этот код, он правильно печатает общее количество строк, но для общего количества слов он всегда печатает всего 1 слово. Может кто-нибудь помочь мне, пожалуйста, спасибо!

import java.util.*;

public class LineAndWordCounter{
  public static void main(String[]args){



    Scanner scan = new Scanner(System.in);
    while(scan.hasNext()){
      String line = scan.next();

      linesCounter(scan);
      wordsCounter(new Scanner(line) );


    }


  }

  public static void linesCounter(Scanner linesInput){
    int lines = 0;
    while(linesInput.hasNextLine()){
      lines++;
      linesInput.nextLine();
    }
    System.out.println("lines: "+lines);
  }

  public static void wordsCounter(Scanner wordInput){
    int words = 0;
    while(wordInput.hasNext()){
      words++;
      wordInput.next();
    }
    System.out.println("Words: "+words);
  }




}

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Это выглядит довольно сложно для меня.

Вы можете просто сохранить каждую строку в ArrayList и накапливать слова в переменной. Примерно так:

List<String> arrayList = new ArrayList<>();
int words = 0;

Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
  String line = scan.nextLine();
  arrayList.add(line);
  words += line.split(" ").length;
  System.out.println("lines: " + arrayList.size());
  System.out.println("words: " + words);
}

scan.close();

Вы также не должны вызывать метод close() для Scanner, чтобы избежать утечки ресурса

0 голосов
/ 26 февраля 2020
scan.next()

возвращает следующее «слово».

Если вы создадите новое Scanner из этого одного слова , оно увидит только одно слово .

Это произойдет с

String line = scan.next();
wordsCounter(new Scanner(line) );
...