我试图获取用户对其性别的输入,并将其转换为字符和大写字母。
但是,我一直收到这个错误:线程" main" java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:在InfoDisplay.main的java.lang.String.charAt(未知来源)处为0(InfoDisplay.java:12)
import java.util.Scanner;
public class InfoDisplay {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String gender;
char genderChar;
System.out.print("Enter gender (Male/Female): ");
gender = sc.nextLine();
gender = gender.toUpperCase();
genderChar = gender.charAt(0);
System.out.println("Your gender is " + genderChar);
}
}
答案 0 :(得分:1)
当您没有在控制台中输入任何字符时(您的String为空),会发生该异常。我建议您使用try/catch
块编写代码。
import java.util.Scanner;
public class InfoDisplay {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String gender;
char genderChar;
System.out.print("Enter gender (Male/Female): ");
try {
gender = sc.nextLine();
gender = gender.toUpperCase();
genderChar = gender.charAt(0);
System.out.println("Your gender is " + genderChar);
} catch(Exception e) {
System.out.println("No gender has been entered. Please, try again");
}
}
}
可能的输出:
您不输入任何字符:
输入性别(男/女):
没有输入任何性别。请再试一次
您输入'F'
char:
输入性别(男/女):f
你的性别是F
您输入任何字符:
输入性别(男/女):x
你的性别是X
也许你会想要创建一个模式或类似的东西,只允许' F'和' M'成为正确的字符。
答案 1 :(得分:0)
试试这个..
import java.util.Scanner;
public class InfoDisplay {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String gender;
char genderChar;
System.out.print("Enter gender (Male/Female): ");
gender = sc.next(); //It will not take Enter as an input
gender = gender.toUpperCase();
genderChar = gender.charAt(0);
System.out.println("Your gender is " + genderChar);
}
}
如果您使用sc.nextLine()
将String作为输入,当您在输入输入后按下它时,它会将Enter
视为String的输入,这样您就可以使用{{1}的另一个替换}。您可以使用sc.nextLine()
如果您的输入字符串不包含空格,那么它将在此处工作。