打印姓氏+;名字-但它显示错误(Java)

打印姓氏+;名字-但它显示错误(Java),java,string,Java,String,因此,我为用户输入了一个代码,以输入他们的名字和姓氏;然后呼气两个位置 比如说。Bulota Babi变成了Babi,Bulota 这是我的密码 public class trial { public static void main(String [] args) { Scanner sc = new Scanner(System.in); String input = sc.nextLine(); String fname = inp

因此,我为用户输入了一个代码,以输入他们的名字和姓氏;然后呼气两个位置

比如说。Bulota Babi变成了Babi,Bulota

这是我的密码

public class trial {
    public static void main(String [] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        String fname = input.substring(0, input.indexOf(0));
        String lname = input.substring(1, input.indexOf(input.length()));

        System.out.println(lname +","+ fname);
    }

}
我不确定是什么问题,这是错误信息

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1967)
    at trial.main(trial.java:11)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
input.indexOf(0)
命令正在查找具有ASCII值的字符的索引
0
。由于未找到,它返回值
-1

indexOf用于查找字符串中字符的位置。您不能通过给它一个数字来使用它,除非它是
输入的字符ASCII值。indexOf(0)
命令正在查找具有ASCII值
0
的字符的索引。由于未找到,它返回值
-1


indexOf用于查找字符串中字符的位置。您不能通过给它一个数字来使用它,除非它是字符ASCII值

问题出在
子字符串
方法中。需要从以下位置切出管柱的起始和结束位置:

public static void main(String args[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        int coma = input.indexOf(' ');
        String fname = input.substring(0, coma);
        String lname = input.substring(coma + 1, input.length());

        System.out.println(lname + "," + fname);

    }

问题出在
子字符串
方法中。需要从以下位置切出管柱的起始和结束位置:

public static void main(String args[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        int coma = input.indexOf(' ');
        String fname = input.substring(0, coma);
        String lname = input.substring(coma + 1, input.length());

        System.out.println(lname + "," + fname);

    }

假设您有一个输入字符串“Bulota Babi”


假设您有一个输入字符串“Bulota Babi”


最好只使用
String.split

public static void main(String [] args) {
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();

    String arr[] = input.split (" ");
    if (arr.length > 1)
        System.out.println(arr[1] +","+ arr[0]);
}
在您的解决方案中,它试图找到一个ascii值为
0
的字符,该字符当然返回
-1
,因为它不存在-因此子字符串失败

编辑

请在下面回答您的评论

         String in = "John Appleseed William";
         String arr[] = in.split (" ");
         if (arr.length == 2) {
             System.out.println(arr[1] + ", " + arr[0]);
         }
         if (arr.length == 3) {
             System.out.println(arr[2] + ", " + arr[0] + " " + arr[1]);
         }

最好只使用
String.split

public static void main(String [] args) {
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();

    String arr[] = input.split (" ");
    if (arr.length > 1)
        System.out.println(arr[1] +","+ arr[0]);
}
在您的解决方案中,它试图找到一个ascii值为
0
的字符,该字符当然返回
-1
,因为它不存在-因此子字符串失败

编辑

请在下面回答您的评论

         String in = "John Appleseed William";
         String arr[] = in.split (" ");
         if (arr.length == 2) {
             System.out.println(arr[1] + ", " + arr[0]);
         }
         if (arr.length == 3) {
             System.out.println(arr[2] + ", " + arr[0] + " " + arr[1]);
         }

String.indexOf
函数作用于ASCII值。在indexOf函数中传递0时,它返回值
-1

之后,您将对范围为(0,-1)的输入字符串执行子字符串

如中所述,java.lang.StringIndexOutOfBoundsException 例外情况将显示索引为负或负 大于字符串的大小


因此,您的异常来自input.substring函数
String.indexOf
函数对ASCII值起作用。在indexOf函数中传递0时,它返回值
-1

之后,您将对范围为(0,-1)的输入字符串执行子字符串

如中所述,java.lang.StringIndexOutOfBoundsException 例外情况将显示索引为负或负 大于字符串的大小


因此,您的异常来自输入。子字符串函数

输入。索引(0)返回-1。因此它抛出上述异常。确认输入是否包含ASCI值为0的字符。如果没有,就满足这个需求。input.index(0)返回-1。因此它抛出上述异常。确认输入是否包含ASCI值为0的字符。如果没有,那就迎合它。哦,是的,我明白你的意思。我以为indexOf是在寻找有indexoh的词是的,我明白你的意思。我认为indexOf是在寻找有indexOf的单词,我认为indexOf what是在寻找每个单词。我搞错了,把它的外观在字符串中的每个字符。我现在明白了:)我想到了寻找每个单词的索引。我搞错了,把它的外观在字符串中的每个字符。我现在明白了:)我想用
split
发布答案,你做到了。。顺便说一句,我没有投反对票……)明白了,但是如果他们有一个中间名,比如约翰·阿普利塞德·威廉,你怎么说你想打印威廉,约翰·阿普利塞德?我想用
split
发布答案,你做到了。。顺便说一句,我没有投反对票……)明白了,但是如果他们有一个中间名,比如约翰·阿普雷塞德·威廉,你怎么说你想印威廉,约翰·阿普雷塞德?