我的问题是,当用户输入除字母表之外的任何内容时,我需要抛出异常。
我无法改变我使用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);
}
那么,如果用户输入包含数字或非字母字符,我可以用什么方法来抛出异常?
答案 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的评论指出的那样,你需要仔细考虑名字中应该接受哪些字符。口音是一个例子,其他可能是西里尔字母或中文字符......或连字符。