Java Scanner,它只包含字母和空格,但不包含仅空格字符串

时间:2016-04-26 18:15:31

标签: java string java.util.scanner

我做了一个简单的程序,允许用户输入一个名字然后问候他。

import java.util.Scanner;
public class nameinput {
    public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a name: (only letters, at least 2 characters long)");
        while (true) {
            String name= sc.next();
            if (name.length() < 2){
                System.out.println("This name is too short!");
                continue;
            }
            else if (!name.matches("[a-zA-Z]+")){
                System.out.println("Letters only!");
                continue;
            }
            else {
                System.out.println("Hello, " + name);
                break;
            }
        }
    }
}

但是我有两个问题我无法解决:

  1. 当用户输入包含空格的名称时,它只会获得空格之前的内容。
  2. 当用户只通过一系列空格,或者没有通过任何内容时,没有任何反应,就像他没有输入任何内容一样。我让用户收到一条正确的消息,告知他不允许使用仅限空格的字符串和空字符串。
  3. 我希望我能清楚地描述问题,提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

如果您只是将sc.next替换为sc.nextLine()。 nextLine将捕获所有按键,直到按下输入。

答案 1 :(得分:1)

import java.util.Scanner;
public class nameinput {
    public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a name: (only letters, at least 2 characters long)");
        while (true) {
            String name= sc.nextLine();
            if (name.length() < 2){
                System.out.println("This name is too short!");
                continue;
            }
            else if (!name.matches("[a-zA-Z]+")){
                System.out.println("Letters only!");
                continue;
            }
            else {
                System.out.println("Hello, " + name);
                break;
            }
        }
    }
}