扫描仪不读取空格字符

时间:2018-08-03 09:08:45

标签: java

我有2个来自用户的输入。一个是说greetings,另一个是tell me your name

但是当我在打个招呼之后写时,ex: Hello mate!!扫描程序不会读取第二个输入mate,并且从第一个字符串中取出hello也是第二个

任何建议

谢谢

public static void main(String[] args) {
        System.out.println("Choose what would you like to say ?");

        String str1 = "";
        String str2 = "";

        System.out.println("Say any greetings word");
        str1 = input();
        System.out.println("Tell me your name");
        str2 = input();

        if (str2.equalsIgnoreCase("zia")) {
            System.out.println("Hello Mr Zia, What a nice suprise");

        }

        else {
            System.out.println(str1 + " " + str2);
        }

    }

    public static String input() {
        Scanner sc = new Scanner(System.in);
        return sc.next();
    }

2 个答案:

答案 0 :(得分:3)

首先,您需要sc.nextLine()来读取整个输入。

第二,您不应该每次都创建一个新的扫描仪。只需像这样重新使用扫描仪:

Scanner sc = new Scanner(System.in);
System.out.println("Say any greetings word");
str1 = sc.nextLine();
System.out.println("Tell me your name");
str2 = sc.nextLine();

如果您不再需要它,请关闭扫描仪:

sc.close();

那样,您甚至不再需要input()方法。

答案 1 :(得分:1)

您不能在同一输入流上构建多个Scanner。它们将彼此冲突,导致您观察到的不一致。

使用所示程序,对方法input()的每次调用都会在一个唯一的System.in上构建一个新的Scanner。同一输入流上不止一个Scanner。无法正常工作。

相反,请在程序开始时一劳永逸地构建一个Scanner,并在每次需要读取输入时使用一个唯一的Scanner。

赞:

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.println("Choose what would you like to say ?");

    System.out.println("Say any greetings word");
    String greeting = scanner.next();
    System.out.println("Tell me your name");
    String name = scanner.next();

    if (name.equalsIgnoreCase("zia")) {
      System.out.println("Hello Mr Zia, What a nice suprise");
    } else {
      System.out.println(greeting + " " + name);
    }
  }