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

时间:2017-06-07 06:40:22

标签: 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 = 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)

5 个答案:

答案 0 :(得分:3)

最好只使用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的char,当然它返回-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]);
         }

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

input.indexOf(0)命令正在查找具有ASCII值0的char的索引。如找不到,它返回值-1

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

答案 3 :(得分:0)

问题出在substring方法中。它需要从字符串开始和结束位置切出:

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);

    }

答案 4 :(得分:0)

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

之后,您在输入字符串上执行subString,范围为(0,-1)。

  

正如java docs for java.lang.StringIndexOutOfBoundsException中提到的,java.lang.StringIndexOutOfBoundsException   例外情况将表明指数是负数或   大于字符串的大小。

所以你的例外来自 input.substring 函数