字符串无法正确解析空格

时间:2015-10-11 19:15:35

标签: java

我是Java的新手,所以我的知识非常有限。我一直试图在这段代码中找到问题。

 import java.util.Scanner;
 public class avgFinder {
   public static void main(String[] args) {
     Scanner scan = new Scanner(System.in);
     System.out.println("Input numbers to average. Separate by a space.");
     String nums = scan.next();
     String[] parseNums = nums.split("[ ]");
     double sum = 0;
     int cnt = 0;
     for (int a=0; a<=parseNums.length-1; a++) {
       sum += Double.parseDouble(parseNums[a]);
       cnt++;
     }
     double mean = sum/cnt;
     System.out.println("Mean: " + mean);
   }
}

但是当我输入一组数字时,只打印第一个数字而不是实际的平均值。例如:

Input numbers to average. Separate by a space.
1 2 3
Mean: 1.0

另一件事是如果我用nums.split("[ ]")替换nums.split("[,]")并在输出中的数字之间加上逗号而不是空格,它实际上输出均值。我更喜欢空间,它看起来更干净。为什么会这样?

3 个答案:

答案 0 :(得分:3)

试试这个

使用nextLine()代替next()

  

nextLine返回完整的文本行,而next返回只有一个单词

也可以使用nums.split(" ");

import java.util.Scanner;
 public class avgFinder {
   public static void main(String[] args) {
     Scanner scan = new Scanner(System.in);
     System.out.println("Input numbers to average. Separate by a space.");
     String nums = scan.nextLine();
     String[] parseNums = nums.split(" ");
     double sum = 0;
     int cnt = 0;
     for (int a=0; a<=parseNums.length-1; a++) {
       sum += Double.parseDouble(parseNums[a]);
       cnt++;
     }
     double mean = sum/cnt;
     System.out.println("Mean: " + mean);
   }
}

答案 1 :(得分:1)

调用Scanner.next()将返回空格前一行中的下一个元素,因此您只能获得输入中的第一个数字。使用Scanner.nextLine()将返回该行的所有值。

答案 2 :(得分:0)

Scanner.next()返回下一个单词。默认情况下,单词由空格分隔。因此,当您调用Scanner.next()时,您的扫描仪会读取第一个数字的数字,点击一个空格,并说“好”,这就是单词的结尾。是时候返回结果&#34;而你最终得到的第一个数字。

当你用逗号替换空格时它的工作原理:没有任何空格,扫描器在到达换行符之前不会找到空格,所以它返回整行。

Scanner.nextLine()返回整行,而不只是一个单词(直到它到达换行符为止),所以我建议改用它。