繁体   English   中英

Java,带有split()的空点异常

[英]Java, null point exception with split()

我在运行此命令时得到了nullpointerexcpetion。 它允许我输入所有输入字段,但会抛出空指针。 有人可以向我解释为什么这样做。 我认为这与split()有关。 以下是三个类别。 任何帮助都会很棒。 本质上,我想接受输入,将其拆分为一个数组,然后调用在特定索引处显示字符串。

//Main Class
public class StarWars {
    public static void main(String[] args) {
        getInput input = new getInput();
        splitInput myInput = new splitInput();
        input.firstName();
        input.lastName();
        input.maidenName();
        input.cityName();

        System.out.println(myInput.splitFirstName());

    }
}

//second class
import java.util.Scanner;


public class getInput {

    public String firstName;
    private String lastName;
    private String maidenName;
    private String cityName;

    Scanner user_input = new Scanner(System.in);

    public void firstName(){    
        System.out.printf("Enter your First Name:");
        firstName = user_input.next().trim().toLowerCase();
    }

    public String getFirstName(){
        return this.firstName;
    }

    public void lastName(){
        System.out.printf("Enter your Last Name:");
        lastName = user_input.next().trim().toLowerCase();
    }

    public String getLastName(){
        return this.lastName;
    }

    public void maidenName(){
        System.out.printf("Enter your Mom's Maiden Name:");
        maidenName = user_input.next().trim().toLowerCase();
    }

    public String getMaidenName(){
        return this.maidenName;
    }

    public void cityName(){
        System.out.printf("Enter your birth City:");
        cityName = user_input.next().trim().toLowerCase();
    }

    public String getCityName(){
        return this.cityName;
    }
}

//Third Class
public class splitInput {
    public String splitFirstName(){
        getInput input = new getInput();
        String x = input.getFirstName();
        String[] splitValue = x.split("");
        String myValue = splitValue[2];
        return myValue;
    }
}

对于那些好奇的评论者,确实发生了例外,因为xnull

  String[] splitValue = x.split("");

问题是您进行了所有调用以获取main myInput对象上的数据,但没有将其传递给splitFirstName 相反,您创建了一个全新的input对象。

更改方法splitFirstName以将input作为参数。

//Third Class
public class splitInput {

    public String splitFirstName(getInput input){

        String x = input.getFirstName();

        System.out.println(x);
        String[] splitValue = x.split("");

        String myValue = splitValue[2];

        return myValue;

    }
}

从main传递参数:

System.out.println(myInput.splitFirstName(input));

请注意,您的代码照原样将打印出名字的前三个字符。 如果这不是您的意图,则可能应该更改它。

同样, Java约定是使用大写首字母来命名类,并使用名词而不是动词来命名类。

当您在主类中调用此语句时

System.out.println(myInput.splitFirstName());

您正在调用splitFirstName()方法,并在其中创建一个新实例 getInput input = new getInput(); 并从新实例中尝试获取其Null属性String x = input.getFirstName(); x值为null。

为了解决这个问题

将getInput对象传递给splitFirstName方法,传递给System.out.println(myInput.splitFirstName(input)); 并将您的方法签名更改为public String splitFirstName(getInput input){并注释新的实例语句

下面我修改了您的代码,它正在工作::

package com.test.punith;

导入java.util.Scanner;

公共类StackTest {

public static void main(String[] args) {

    getInput input = new getInput();
    splitInput myInput = new splitInput();

    input.firstName();
    input.lastName();
    input.maidenName();
    input.cityName();

    System.out.println(myInput.splitFirstName(input));

}

}

类getInput {

public String firstName;
private String lastName;
private String maidenName;
private String cityName;

Scanner user_input = new Scanner(System.in);

public void firstName(){    
    System.out.printf("Enter your First Name:");
    firstName = user_input.next().trim().toLowerCase();

}

public String getFirstName(){
    return this.firstName;
}

public void lastName(){

    System.out.printf("Enter your Last Name:");
    lastName = user_input.next().trim().toLowerCase();
}

public String getLastName(){
    return this.lastName;
}

public void maidenName(){

    System.out.printf("Enter your Mom's Maiden Name:");
    maidenName = user_input.next().trim().toLowerCase();
}

public String getMaidenName(){
    return this.maidenName;
}

public void cityName(){

    System.out.printf("Enter your birth City:");
    cityName = user_input.next().trim().toLowerCase();
}

public String getCityName(){
    return this.cityName;
}

}

//第三类class splitInput {

public String splitFirstName(getInput input){

    //getInput input = new getInput();

    String x = input.getFirstName();

    String[] splitValue = x.split("");

    String myValue = splitValue[2];

    return myValue;

}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM