Java,使用split()的零点异常

时间:2014-04-22 17:27:52

标签: java 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;
    }
}

2 个答案:

答案 0 :(得分:0)

对于那些好奇的评论,Exception确实发生在这一行,因为xnull

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

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

更改方法splitFirstNameinput作为参数。

//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约定是使用大写的第一个字母命名类,并使用名词而不是动词来命名类。

答案 1 :(得分:0)

在主类

中调用此语句时
System.out.println(myInput.splitFirstName());

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

解决这个问题

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

下面我修改了你的代码::;

package com.test.punith;

import 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));

}

}

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;
}

}

//第三类 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;

}

}