charAt(0)字符串索引超出范围:0

时间:2016-08-27 09:36:27

标签: java

我试图获取用户对其性别的输入,并将其转换为字符和大写字母。

但是,我一直收到这个错误:线程" 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);
    }
}

2 个答案:

答案 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()如果您的输入字符串不包含空格,那么它将在此处工作。