Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果用户输入不是字符串,如何引发异常?_Java_String_Numbers_Ioexception - Fatal编程技术网

Java 如果用户输入不是字符串,如何引发异常?

Java 如果用户输入不是字符串,如何引发异常?,java,string,numbers,ioexception,Java,String,Numbers,Ioexception,我的问题是,当用户输入字母表以外的任何内容时,我需要抛出一个异常 我无法改变我使用BufferedReader的事实,因为它是学校作业的一部分。这是我的密码: public static String phoneList(String lastNameInput, String nameInput) throws IOException { BufferedReader bufferedreader = new BufferedReader( n

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

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

}

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

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

“[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.");
        }
试试看{
System.out.println(“请输入您的名字”);
//用户输入块
字符串输入=bufferedreader.readLine();
名称输入=输入;

对于(inti=0;i如果您的意思是字符串应该只包含字母,那么使用String.matches(regex)

“[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.");
        }
试试看{
System.out.println(“请输入您的名字”);
//用户输入块
字符串输入=bufferedreader.readLine();
名称输入=输入;
对于(int i=0;i
我的问题是,当用户输入字符串以外的任何内容(即int、float或double)时,我需要抛出异常

你所问的没有意义。举例来说,“12345”是一个字符串。是的……它是。因此,如果你调用
readLine()
并且该行只包含数字,你将得到一个只包含数字的字符串

因此,为了解决您的问题,在读取字符串后,您需要验证它,以确保它是一个可接受的“名字”。您可以通过多种方法来实现这一点:

  • 最简陋的方法是迭代字符串,检查每个字符是否可以接受
  • 一种稍微不那么粗糙(但可能是错误的)的方法可能是尝试将字符串解析为浮点数的整数。(作为练习,找出我为什么说“可能是错误的”。)
  • 优雅的方法是使用
    java.util.regex.Pattern
    和匹配可接受名称的模式,并排除不需要的内容,如数字、嵌入的空格和标点符号
正如@DanielFischer的评论所指出的,你需要仔细考虑名字中哪些字符是可以接受的。口音就是一个例子,其他可能是西里尔文或中文字符……或连字符

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

你所问的没有意义。举例来说,“12345”是一个字符串。是的……它是。因此,如果你调用
readLine()
并且该行只包含数字,你将得到一个只包含数字的字符串

因此,为了解决您的问题,在读取字符串后,您需要验证它,以确保它是一个可接受的“名字”。您可以通过多种方法来实现这一点:

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


正如@DanielFischer的评论所指出的,你需要仔细考虑名字中哪些字符是可以接受的。重音是一个例子,其他可能是西里尔文或中文字符…或连字符。

所有输入都是字符串,基本上是根据定义。java关于抛出异常的课程我编辑了我的原始帖子,因此现在应该更有意义了。所有输入基本上都是字符串。java关于抛出异常的课程我编辑了我的原始帖子,所以现在应该更有意义了。安德烈不会对这个正则表达式感到太高兴。名字中有发音符号的人也存在。“如果你的意思是字符串应该只包含字母表”是的,对不起,这正是我的意思,我现在就试试代码。你是说
Character#islitter
@luigimendoza我们可以称之为islitter()或!isDigit():)我不这么认为。任何像
!@$%^&*()
这样的符号都会通过
!Character#isDigit()
验证。安德烈不会对这个正则表达式感到太高兴。名字中也有带变音符号的人。”如果你是说字符串应该只包含字母表“是的,对不起,这正是我的意思,我现在就试试代码。你是说
字符35; isLetter
@Luigimendoza我们可以称之为isLetter()或!isDigit():)我不这么认为。任何像
!@$%^&*()
这样的符号都会传递
!Character#isDigit()
validation。是的,对不起。我的意思是任何数字,因为程序的目的是打印一个姓,然后是一个名,但我需要一个错误来阻止用户输入数字。另外@Daniel Fischer,是的,我知道有些人的名字中有变音符号,但我刚刚得到了老师的指派,所以怪他@提摩太·波特兰斯-“……怪他吧”-我不会!!!他/她正在简化编程练习的问题,以便班上的每个人都能完成它。我只是向你指出这个问题…这样当你必须在现实世界的应用程序中进行这种编程时,你会适当地考虑这个问题。对不起,只是他的说明是正确的aid只会屏蔽数字和非字母字符。如果你必须考虑所有这些,那么验证人名几乎是不可能的任务