Java 如果用户输入不是字符串,如何引发异常?
我的问题是,当用户输入字母表以外的任何内容时,我需要抛出一个异常 我无法改变我使用BufferedReader的事实,因为它是学校作业的一部分。这是我的密码: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
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只会屏蔽数字和非字母字符。如果你必须考虑所有这些,那么验证人名几乎是不可能的任务