Java 将名称拆分为第一个和最后一个时出现异常try and catch

Java 将名称拆分为第一个和最后一个时出现异常try and catch,java,exception,try-catch,Java,Exception,Try Catch,我被要求编写一个程序来使用try-and-catch处理异常。虽然,当我运行它时,它不会反映我的异常代码,因为应该打印“无效名称”。有人能指出原因吗?如果有人修改我的代码,我也会非常欢迎!谢谢 我需要在以下条件下编写一个程序: 导入javax.naming.InvalidNameException。 编写一个方法public void printName(字符串名)抛出InvalidNameException 如果名称没有空格,则该方法应引发InvalidNameException。 编写一个要

我被要求编写一个程序来使用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之外别无选择?那是联合国大学