所以我为用户输入了他们的名字和姓氏的代码;然后把两个位置都用完了。
例如,。 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)
答案 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 函数