Java StringIndexOutOfBoundsException:字符串索引超出范围0
我正在尝试编写一个程序,以获取用户输入的第一个字母来生成用户名。我试图编写它,这样如果用户将输入留空,那么生成用户名的字母默认为字母“z” 这是我的全部代码:Java StringIndexOutOfBoundsException:字符串索引超出范围0,java,indexing,Java,Indexing,我正在尝试编写一个程序,以获取用户输入的第一个字母来生成用户名。我试图编写它,这样如果用户将输入留空,那么生成用户名的字母默认为字母“z” 这是我的全部代码: import java.util.Scanner; /** UsernameGenerator.java Generates a username based on the users inputs. @author: Evan Fravert */ public class
import java.util.Scanner;
/**
UsernameGenerator.java
Generates a username based on the users inputs.
@author: Evan Fravert
*/
public class UsernameGenerator {
/**
* Generates a username based on the users inputs.
*@param args command line argument
*/
public static void main(String[] args)
{ // abcde
String first;
String middle;
String last;
String password1;
String password2;
int randomNum;
randomNum = (int) (Math.random() * 1000) + 100;
Scanner userInput = new Scanner(System.in);
System.out.println("Please enter your first name:");
first = userInput.nextLine();
String firstLower = first.toLowerCase();
System.out.println("Please enter your middle name:");
middle = userInput.nextLine();
String middleLower = middle.toLowerCase();
System.out.println("Please enter your last name:");
last = userInput.nextLine();
int lastEnd = last.length()-1;
String lastLower = last.toLowerCase();
System.out.println("Please enter your password:");
password1 = userInput.nextLine();
System.out.println("Please enter your password again:");
password2 = userInput.nextLine();
char firstLetter = firstLower.charAt(0);
char middleLetter = middleLower.charAt(0);
char lastLetter = lastLower.charAt(0);
char lastLast = lastLower.charAt(lastEnd);
if first.length() == 0) {
firstLetter = 'z';
}
else {
firstLetter = firstLower.charAt(0);
}
System.out.println("Your username is " + firstLetter + ""
+ middleLetter + "" + lastLetter + "" + "" + lastLast + "" + randomNum);
System.out.println("Your password is " + password1);
System.out.println("Welcome " + first + " " + middle + " " + last + "!");
}
}
异常可能在此处引发:
char firstLetter = firstLower.charAt(0);
在检查输入是否为空之前,您正在调用charAt(0)
。请尝试以下方法:
char firstLetter = first.isEmpty() ? 'z' : firstLower.charAt(0);
请注意,
first.isEmpty()
是与first.length()==0
等价的表达式。异常可能在此处引发:
char firstLetter = firstLower.charAt(0);
在检查输入是否为空之前,您正在调用charAt(0)
。请尝试以下方法:
char firstLetter = first.isEmpty() ? 'z' : firstLower.charAt(0);
请注意,
first.isEmpty()
是与first.length()==0
等效的表达式,这不起作用:
char firstLetter = firstLower.charAt(0);
...
if (first.length() == 0) {
firstLetter = 'z';
}
如果长度为0,则charAt(0)
将在标题中抛出异常。您可以这样做:
char firstLetter = first.length() == 0 ? 'z' : firstLower.charAt(0);
这是行不通的:
char firstLetter = firstLower.charAt(0);
...
if (first.length() == 0) {
firstLetter = 'z';
}
如果长度为0,则charAt(0)
将在标题中抛出异常。您可以这样做:
char firstLetter = first.length() == 0 ? 'z' : firstLower.charAt(0);
从此行中获取异常
char firstLetter = firstLower.charAt(0);
下面的一个就足够得到第一个字母了。所以只保留这个
char firstLetter;
if (first.length() == 0) {
firstLetter = 'z';
}
else {
firstLetter = firstLower.charAt(0);
}
以同样的方式,您必须检查其他输入字符串值u从此行获取异常
char firstLetter = firstLower.charAt(0);
下面的一个就足够得到第一个字母了。所以只保留这个
char firstLetter;
if (first.length() == 0) {
firstLetter = 'z';
}
else {
firstLetter = firstLower.charAt(0);
}
同样,您必须检查其他输入字符串值请包括stacktrace。如果你让帮助你变得容易,人们会的。请包括stacktrace。如果你能让帮助你变得容易,人们会的。