为什么 Java 不在此处打印最后一个词?

Why won't Java print last word here?

为什么要打印整个字符串“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,fish,2,fish”,它也只会打印“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());
  }
}

在第一种情况下,扫描器不需要最后一个分隔符,因为它知道没有更多的字符。所以,它知道最后一个标记是 'fish' 并且没有更多的字符要处理。

在 System.in 扫描的情况下,只有在系统输入中输入第四个 ',' 时,第四个标记才被视为已完成。

请注意,默认情况下,白色 space 被视为分隔符。但是,一旦您使用 useDelimiter 指定了备用分隔符,那么白色 space 字符将不再划分标记。

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

  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();

  }

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

Scanner 等待您输入另一个 ',',所以当您输入 ',' 之后它会在 1fish2 后立即打印鱼。

所以通过 1,fish,2,fish, 而不是 1,fish,2,fish

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

  1fish
  2fish

Link - http://code.geeksforgeeks.org/jK1Mlu

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