避免用户输入中出现NullPointerException

时间:2019-01-19 19:45:32

标签: java

我正在使用JDK 1.7, 我正在检查所有输入条件的代码。 如果用户未在字符串中输入任何值,则抛出NullPointerException。 即使用户没有输入任何值,有没有办法防止引起NullPointerException?

我尝试了try catch块来捕获异常

import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class TestClass {
   public static void main(String args[]) throws Exception {

    Scanner s = new Scanner(System.in);    
    int i=s.nextInt();
    System.out.println(i);

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();
    try{
        int length=str.length();  //NullPointerException here

        if(length>=1 && length<=15)
        {
            System.out.println(str);
        }
    }
    catch(NullPointerException e)
    {
        System.out.println("Must enter a string");
    }
   }
}

样本输入- 5 空

预期输出-  5  (空字符串值->“”,但未引发异常消息)

4 个答案:

答案 0 :(得分:2)

Java 8

int length = Optional.ofNullable(str).orElse("").length();

Java 7

int length = str == null ? 0 : str.length();

Java 7 + Apache Commons

int length = StringUtils.length(str);

使用Scanner

使用Scanner代替BufferedReaderscane.nextLine()不返回null字符串。


public static void main(String... args) {
    try (Scanner s = new Scanner(System.in)) {
        System.out.println(s.nextInt());

        s.nextLine();

        String str = s.nextLine();

        if (str.length() >= 1 && str.length() <= 15)
            System.out.println(str);
    }
}

答案 1 :(得分:0)

您可以在调用str.length()

之前检查str是否不为null而不是try / catch。
Scanner s = new Scanner(System.in);
String str = s.nextLine();
if (str != null && str.length() <= 15) {
   System.out.println(str);
} else {
   System.out.println("Must enter a string");
}

答案 2 :(得分:0)

[1] "November 5, 2018" "November 2, 2018"

答案 3 :(得分:0)

1)阅读文档-请注意,在明确定义的情况下,BufferedReader.readline可以合法地返回null。

2)编写可以处理可能的null返回的代码。