为什么Java不会在这里打印最后一个字?

时间:2016-06-20 07:00:18

标签: java java.util.scanner system.in

为什么打印整个字符串“1fish2fish”...

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    String input = "1,fish,2,fish";
    Scanner sc = new Scanner(input);
    sc.useDelimiter(",");
    System.out.print(sc.nextInt());
    System.out.println(sc.next());
    System.out.print(sc.nextInt());
    System.out.println(sc.next());
  }
}

但即使我输入“1,鱼,2,鱼”,这只打印“1fish2”?

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    System.out.println("Enter your string: ");
    Scanner sc = new Scanner(System.in);
    sc.useDelimiter(",");
    System.out.print(sc.nextInt());
    System.out.println(sc.next());
    System.out.print(sc.nextInt());
    System.out.println(sc.next());
  }
}

3 个答案:

答案 0 :(得分:4)

在第一种情况下,扫描仪不需要最后一个分隔符,因为它知道不再有字符。所以,它知道最后一个标记是“鱼”。并且没有其他角色可以处理。

在System.in扫描的情况下,第四个令牌仅在第四个令牌时被视为已完成,'输入到系统输入中。

请注意,默认情况下,空格被视为分隔符。但是,一旦使用useDelimiter指定备用分隔符,则空格字符不再标记标记。

事实上,您的第一次试用可以修改,以证明空白字符不再是分隔符...

  public static void main(String[] args) {
    String input = "1,fish,2,fish\n\n\n";
    Scanner sc = new Scanner(input);
    sc.useDelimiter(",");
    System.out.print(sc.nextInt());
    System.out.println(sc.next());
    System.out.print(sc.nextInt());
    System.out.println(sc.next());

    System.out.println("Done");
    sc.close();

  }

新行字符将被视为第四个标记的一部分。

答案 1 :(得分:1)

我检查了第一个片段;它正确打印 -

  1fish
  2fish

链接 - http://code.geeksforgeeks.org/jK1Mlu

如果您的期望不同,请告诉我们。

答案 2 :(得分:0)

扫描仪等待你输入另一个','所以当你输入','然后它会在1fish2之后立即打印鱼。

所以通过1,fish,2,fish,代替1,fish,2,fish