首页 > 解决方案 > 避免来自用户输入的 NullPointerException

问题描述

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

我尝试尝试捕获块来捕获异常

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 null

预期输出- 5(空字符串值->“”但没有抛出异常消息)

标签: java

解决方案


爪哇 8

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

爪哇 7

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

Java 7 + Apache Commons

int length = StringUtils.length(str);

利用Scanner

使用Scanner代替BufferedReader; scane.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);
    }
}

推荐阅读