如果用户输入是除字符串之外的任何内容,如何抛出异常?

时间:2012-11-05 00:52:19

标签: java string numbers ioexception

我的问题是,当用户输入除字母表之外的任何内容时,我需要抛出异常。

我无法改变我使用BufferedReader的事实,因为它是学校作业的一部分。这是我的代码:

public static String phoneList(String lastNameInput, String nameInput)
        throws IOException {

    BufferedReader bufferedreader = new BufferedReader(
            new InputStreamReader(System.in));

    try {

        System.out.println("Please input your first name.");
        // User input block
        String input = bufferedreader.readLine();
        nameInput = input;
    } catch (IOException e) {
        System.out.println("Sorry, please input just your first name.");
    }

    try {
        System.out.println("Please input your last name.");
        String input2 = bufferedreader.readLine();
        lastNameInput = input2;
    } catch (IOException e) {
        System.out
                .println("Sorry, please only use letters for your last name.");
    }
    return (lastNameInput + ", " + nameInput);

}

那么,如果用户输入包含数字或非字母字符,我可以用什么方法来抛出异常?

2 个答案:

答案 0 :(得分:3)

如果您的意思是String应该只包含字母表,那么请使用String.matches(regex)。

if(bufferedreader.readLine().matches("[a-zA-Z]+")){
System.out.println("user entered string");
}
else {
throw new IOException();
}

“[a-zA-Z]”正则表达式只允许来自a-z或A-Z的字母

或者如果你不想使用正则表达式。你必须循环通过字符串并检查每个字符是否不是数字。

try{

        System.out.println("Please input your first name.");
        //User input block
        String input = bufferedreader.readLine();
        nameInput = input;
         for(int i=0; i<nameInput.length();i++){
             if(Character.isLetter(nameInput.charAt(i))){
                continue;
              }
              else {
                throw new IOException();
              }
           }
        } catch(IOException e){
            System.out.println("Sorry, please input just your first name.");
        }

答案 1 :(得分:3)

  

我的问题是当用户输入除字符串以外的任何内容(即int,float或double)时,我需要抛出异常。

你问的是没有意义的。为了说明,“12345”是一个字符串。是的。因此,如果您拨打readLine()并且该行只包含数字,您将获得一个仅由数字组成的字符串。

因此,为了解决您的问题,在您阅读完字符串后,您需要验证以确保它是可接受的“名字”。你可以通过多种方式实现这一目标:

  • 最粗略的方法是迭代字符串,检查每个字符是否可以接受。
  • 稍微不那么原始(但可能是错误的)方法可能是尝试将字符串解析为浮点数的整数。 (作为练习,弄清楚为什么我说“可能是错的”。)
  • 优雅的方法是使用java.util.regex.Pattern和匹配可接受名称的模式,并排除不需要的内容,如数字,嵌入的空格和标点符号。

正如@ DanielFischer的评论指出的那样,你需要仔细考虑名字中应该接受哪些字符。口音是一个例子,其他可能是西里尔字母或中文字符......或连字符。