private void getName()
{
System.out.println("Please enter your full name");
String fullName = iscan.next();
getUserName(fullName);
}
private void getUserName(String fullName)
{
String firstChar = fullName.substring(0, 1);
int firstSpace = fullName.indexOf(" ");
int lastSpace = fullName.lastIndexOf(" ");
String lastName = fullName.substring(firstSpace, lastSpace);
String userName = firstChar+lastName;
System.out.println("Your username is: " +userName);
}
每当我尝试输入名称时,代码就会崩溃。 出现的错误是 线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 提前致谢!
最佳答案
首先,如果这些方法不属于对象类,我会将它们设为静态。
目前,您的代码正在崩溃,因为您的扫描仪仅读取“John”,并且如果您要查找的字符不在字符串中,则 indexOf() 返回 -1。因此,您尝试获取索引 -1 到 -1 之间的子字符串,该子字符串超出了数组范围,因此出现了越界错误。
scan.next() 在空格处终止,您将需要使用 scan.nextLine() 它将读取整个字符串,直到到达行尾。
字符串中只有一个空格,因此第一个和最后一个空格将位于相同的索引处。
使用以下代码:
String lastName = fullName.substring(firstSpace + 1, fullName.length());
现在您不再需要第二个空间的代码。 您还可以使用 split("") 在空格处将字符串分成两半(这将是我解决此问题的首选方法,或使用正则表达式,但这似乎太过分了)。
您自己解决这个问题的一个简单方法是通过放置 print 语句来确保您从方法调用或使用调试器中获得所需的内容。
学习调试器也是无价的,因为如果您可以看到程序每一步发生的底层过程,那么这个问题并不难解决。
关于java - 代码正在崩溃,它应该采用全名,例如John Cena 并将其输出为 JCena),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256183/