【问题标题】:Java use Scanner to count words and lines from user inputJava 使用 Scanner 从用户输入中计算单词和行数
【发布时间】:2015-02-25 06:25:29
【问题描述】:

我正在尝试使用 Scanner 类来计算来自用户输入的单词和行数,这是我的尝试:

import java.util.Scanner;

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

    Scanner input = new Scanner(System.in);

    printWords(input);
    printLines(input);

  }

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



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

  }
}

我发现这两种方法单独工作 100% 正常,但只有第一个调用的方法一起工作(在这种情况下的 printWords 方法)。有没有什么方法可以组合这些方法,使其可以作为一个循环工作?

【问题讨论】:

  • 您可能会发现先读取所有输入,然后再计算比较容易。

标签: java while-loop count java.util.scanner


【解决方案1】:

你可以用下面的代码计算单词,行

 public static void printWordsOfLines(Scanner x){
 Scanner line=x;
 Scanner word=x;
int lines = 0;
System.out.println("Enter q to quite input");
int words=0;

while(line.hasNextLine()){
   String xx=line.next();

   String w[]=xx.split("  ");
   String l[]=xx.split("\n");

   words+=w.length;
   lines+=l.length;

   if(xx.equals("q"))
       break;
  else   
      x.nextLine();
    }
  System.out.println("lines: " + lines);
  System.out.println("words: " + words);
}

【讨论】:

  • 感谢您的回答,尽管我仍然不确定我是否理解。这些扫描仪 line 和 word 仍然指的是同一个输入扫描仪,所以再次只有 line 循环起作用,而 word 循环没有任何东西可以循环?
【解决方案2】:

每个方法都会从你的控制台读取一行。因此,您必须更改为在字符串中读取该行一次,然后再使用它。

  public static void main(String [ ] args){

    Scanner input = new Scanner(System.in);

    while(input.hasNext()){
        String line =input.next();

        printWords(new Scanner(line));
        printLines(new Scanner(line));
    }
  }

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



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

  }

【讨论】:

    【解决方案3】:

    希望这可以帮助您找到字数、行数和不包括空格的字数。

    String i=null;
    Scanner input = new Scanner(System.in);
    int line=0;
    i= input.nextLine();
    if(i!=null)
    {
        line++;
    }
    StringBuffer sb = new StringBuffer();
    sb.append(i);   
    
    int wordcount=sb.length();
    
    System.out.println("Content"+i);
    System.out.println("wordsCount:"+wordcount);
    System.out.println("LineCount"+line);
    System.out.println("Excluding white spaces"+i.replaceAll(" ", "").length());
    

    【讨论】:

      【解决方案4】:

      你在这里得到了很好的答案。 只是想稍微锐化一些东西。 在您的示例中,通过完成单词计数,扫描仪指针位于输入的最后一个单词的末尾 - 因此,当您启动行数计数时,您没有什么可计数的。

      通过掌握它,现在您最好先计算每一行。然后按照@Balayesu Chilakalapudi 的建议通过 split 方法计算单词,或者按照@Jens 的建议创建另一个扫描仪,在每一行上运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        • 2015-05-23
        相关资源
        最近更新 更多