Java 将名称拆分为第一个和最后一个时出现异常try and catch
我被要求编写一个程序来使用try-and-catch处理异常。虽然,当我运行它时,它不会反映我的异常代码,因为应该打印“无效名称”。有人能指出原因吗?如果有人修改我的代码,我也会非常欢迎!谢谢 我需要在以下条件下编写一个程序: 导入javax.naming.InvalidNameException。 编写一个方法public void printName(字符串名)抛出InvalidNameException 如果名称没有空格,则该方法应引发InvalidNameException。 编写一个要测试的驱动程序Java 将名称拆分为第一个和最后一个时出现异常try and catch,java,exception,try-catch,Java,Exception,Try Catch,我被要求编写一个程序来使用try-and-catch处理异常。虽然,当我运行它时,它不会反映我的异常代码,因为应该打印“无效名称”。有人能指出原因吗?如果有人修改我的代码,我也会非常欢迎!谢谢 我需要在以下条件下编写一个程序: 导入javax.naming.InvalidNameException。 编写一个方法public void printName(字符串名)抛出InvalidNameException 如果名称没有空格,则该方法应引发InvalidNameException。 编写一个要
===============Code result=============
Enter your name: James Dean
First name: James
Last name: Dean
Enter your name: Brian Smith
First name: Brian
Last name: Smith
Enter your name: RuthKnight
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Name.printName(Name.java:33)
at NameApp.main(NameApp.java:17)
只需这样做:
if (name.contains(" ")) {
} else {
throw new InvalidNameException ("Name does not contain the space");
}
String in = console.nextLine();
if (in.contains(" ") {
aa.printName(in);
}
else {
System.out.println("invalid name");
}
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
只需这样做:
if (name.contains(" ")) {
} else {
throw new InvalidNameException ("Name does not contain the space");
}
String in = console.nextLine();
if (in.contains(" ") {
aa.printName(in);
}
else {
System.out.println("invalid name");
}
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
您需要检查输入的名称是否可拆分,如果不可拆分,则您没有值
名称[1]
,这就是它引发异常的原因您需要检查输入的名称是否可拆分,如果不可拆分,则您没有值名称[1]
,这就是它引发异常的原因行为与预期一样,异常由行触发
String last = nameSplit[1]
因为“RuthKnight”.split(“”)的结果是一个包含单个元素的数组,因此它在位置1没有元素(导致抛出ArrayIndexOutOfBoundsException
)
异常类型javax.naming.InvalidNameException
不会在代码中的任何地方抛出,您不应该真正使用它,因为此异常是为javax.naming
中的代码设计的
您应该修改代码,如下所示:
if (name.contains(" ")) {
} else {
throw new InvalidNameException ("Name does not contain the space");
}
String in = console.nextLine();
if (in.contains(" ") {
aa.printName(in);
}
else {
System.out.println("invalid name");
}
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
行为如预期,异常由行触发
String last = nameSplit[1]
因为“RuthKnight”.split(“”)的结果是一个包含单个元素的数组,因此它在位置1没有元素(导致抛出ArrayIndexOutOfBoundsException
)
异常类型javax.naming.InvalidNameException
不会在代码中的任何地方抛出,您不应该真正使用它,因为此异常是为javax.naming
中的代码设计的
您应该修改代码,如下所示:
if (name.contains(" ")) {
} else {
throw new InvalidNameException ("Name does not contain the space");
}
String in = console.nextLine();
if (in.contains(" ") {
aa.printName(in);
}
else {
System.out.println("invalid name");
}
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
i您输入的这个场景名为
RuthKnigh
名称字符串只包含一个字符串
而不是这个
String [] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
如果
if( name.contains(" "))
{
String [] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
}
i您输入的这个场景名为
RuthKnigh
名称字符串只包含一个字符串
而不是这个
String [] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
如果
if( name.contains(" "))
{
String [] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
}
String[]nameSplit=name.split(“+”,2);
如果(名称分裂长度<2){
抛出新的InvalidNameException(“名称中缺少空格”);
}
split的可选参数2表示最大拆分数。
试试“Josédel Rey”。String[]nameSplit=name.split(“+”,2);
如果(名称分裂长度<2){
抛出新的InvalidNameException(“名称中缺少空格”);
}
split的可选参数2表示最大拆分数。
尝试“Josédel Rey”。我建议在
Name
类中捕获异常,然后抛出InvalidNameException
,如下所示:
if (name.contains(" ")) {
} else {
throw new InvalidNameException ("Name does not contain the space");
}
String in = console.nextLine();
if (in.contains(" ") {
aa.printName(in);
}
else {
System.out.println("invalid name");
}
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
更新
运行此代码:
import javax.naming.InvalidNameException;
public class NameApp{
public static void main(String[] args) {
Name aa = new Name();
try {
System.out.print("Enter your name: ");
String in = "George Den";
aa.printName(in);
in = "George";
aa.printName(in);
}
catch(InvalidNameException e){
System.out.println(e.toString());
}
}
}
import javax.naming.InvalidNameException;
public class Name {
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
}
将打印以下内容:
输入您的姓名:名:乔治姓:登
javax.naming.InvalidNameException:中缺少空格:George
更新2
考虑@robjohncox的建议。此代码不应按原样使用,因为javax.naming.InvalidNameException
只应在特定情况下抛出,例如LDAP查找和通常特定于目录的操作
对您来说最好的方法是对Exception对象进行子类化,并创建您自己的异常类型(另请参见此):
然后在代码中使用此MyCustomNamingException
,正如前面使用InvalidNameException
所示,我建议在Name
类中捕获异常,然后抛出InvalidNameException
,如下所示:
if (name.contains(" ")) {
} else {
throw new InvalidNameException ("Name does not contain the space");
}
String in = console.nextLine();
if (in.contains(" ") {
aa.printName(in);
}
else {
System.out.println("invalid name");
}
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
更新
运行此代码:
import javax.naming.InvalidNameException;
public class NameApp{
public static void main(String[] args) {
Name aa = new Name();
try {
System.out.print("Enter your name: ");
String in = "George Den";
aa.printName(in);
in = "George";
aa.printName(in);
}
catch(InvalidNameException e){
System.out.println(e.toString());
}
}
}
import javax.naming.InvalidNameException;
public class Name {
public void printName(String name) throws InvalidNameException {
try {
String[] nameSplit = name.split(" ");
String first = nameSplit[0];
String last = nameSplit[1];
System.out.println("First name: " + first);
System.out.println("Last name: " + last);
} catch (ArrayIndexOutOfBoundsException e) {
throw new InvalidNameException("Missing space in: " + name);
}
}
}
将打印以下内容:
输入您的姓名:名:乔治姓:登
javax.naming.InvalidNameException:中缺少空格:George
更新2
考虑@robjohncox的建议。此代码不应按原样使用,因为javax.naming.InvalidNameException
只应在特定情况下抛出,例如LDAP查找和通常特定于目录的操作
对您来说最好的方法是对Exception对象进行子类化,并创建您自己的异常类型(另请参见此):
然后在代码中使用此MyCustomNamingException
,正如前面使用的InvalidNameException
InvalidNameException未在此处抛出所示,而且根本不应该使用-此异常是为javax.naming包使用而设计的,不应该重新调整用途。InvalidNameException不会在此处的任何位置抛出,也不应该使用-此异常是为javax.naming包使用而设计的,不应该重新调整用途。嗨,Robjohncox!如果我能像您所写的那样编写代码,我也会很高兴:-),但它被赋予了任务,所以除了使用javax.naming.InvalidNameException之外别无选择。感谢您对ArrayIndexOutOfBoundsException的解释。除了使用InvalidNameException之外别无选择?这是不寻常的。也许你应该反抗这个任务,并解释为什么不应该使用它:)反抗?哈哈哈,那很酷!因为我必须处理它,如果你知道的话,毫不犹豫地分享你的意见。这会有帮助的。谢谢:-)嗨,Robjohncox!如果我能像您所写的那样编写代码,我也会很高兴:-),但它被赋予了任务,所以除了使用javax.naming.InvalidNameException之外别无选择。感谢您对ArrayIndexOutOfBoundsException的解释。除了使用InvalidNameException之外别无选择?那是联合国大学