0

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

我无法改变我正在使用 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);

}

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

4

2 回答 2

3

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

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

"[a-zA-Z]" 正则表达式只允许来自 az 或 AZ 的字母

或者如果你不想使用正则表达式。如果不是数字,您将不得不遍历字符串并检查每个字符。

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.");
        }
于 2012-11-05T00:53:58.140 回答
3

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

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

因此,要解决您的问题,在您读取字符串后,您需要对其进行验证以确保它是可接受的“名字”。您可以通过多种方式做到这一点:

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

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

于 2012-11-05T01:04:23.967 回答