为什么我得到java.lang.NullPointerException?

时间:2015-05-06 04:05:22

标签: java nullpointerexception

我想输入一个名字并打印第一个字符....

public class Test {

    public static void main(String[] args) {

        Console console = System.console();
        System.out.println("Type your name : ");
        String inputChar = console.readLine();

        char firstChar = inputChar.charAt(0);

        System.out.println(firstChar);



    }
}

2 个答案:

答案 0 :(得分:2)

某些IDE将返回控制台类的NPE。您可以使用Scanner类轻松完成:

试试这个:

      Scanner scan = new Scanner(System.in);
      System.out.println("Enter a Name:");
      String s = scan.next();
      System.out.println(s.charAt(0));

这将打印输入字符串的第一个字母。

答案 1 :(得分:1)

使用Console类有时可能有点不可靠。

对于读取控制台输入,最好使用Scanner类或BufferedReader。 您可以使用扫描仪,如:

Lib/distutils

您也可以使用BufferedReader,如:

pre Java 7语法

Scanner scanner = new Scanner(System.in); // System.in is the console's inputstream
System.out.print("Enter text : ");
String input = scanner.nextLine();
// ^^ This reads the entire line. Use this if you expect spaces in your input
// Otherwise, you can use scanner.next() if you only want to read the next token
System.out.println(input);

Java 7语法

try {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Enter text : ");
        String input = br.readLine();
        System.out.println(input);
        br.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

注意:调用br.readLine()时需要使用try-catch语句,因为它会抛出IOException。

如果要读取令牌(由空格分隔的文本块),可以使用扫描仪。如果您只想从InputStream中读取,请使用BufferedReader。