数组打印空 - Java

时间:2016-07-04 16:34:00

标签: java arrays

所以我创建了一个名称类,并使用数组来存储名字和姓氏,并使用split函数分隔" &#34 ;.编辑:对不起它是更大项目的一部分,复制所有代码是没有意义的。我有一个由Name类组成的Person类。 person类使用下面的getStatement,println将其打印出来。

public Name(String name){
    String [] nameArr = name.split(" ");
    for (int i = 0; i < nameArr.length; i++){
        if (i == 0)
            firstName = nameArr[i];
        else{
            if(nameArr[i] != null){
                lastName += nameArr[i];
            }                    
        }
    }
}

public String getName(){
        return (name.getLast() + " " +  name.getFirst());
    }

一个名字的输出,Joe Shmoe,来到nullShome Joe ......我无法弄清楚为什么= [

2 个答案:

答案 0 :(得分:3)

只需将lastName属性初始化为循环前面的空字符串:

lastName = "";
for (int i = 0; i < nameArr.length; i++){ 
    ...

否则,lastName最初为null,语句lastName += nameArr[i];导致lastName设置为null<LastName>

实际上,您可以使用设置为2的{​​{3}}完全避免循环:

public Name(String name){
    String[] nameArr = name.split(" ", 2);
    firstName = nameArr.length > 0 ? nameArr[0] : "";
    lastName = nameArr.length > 1 ? nameArr[1] : "";
}

另一个一般提示:在循环中通过连接构建字符串时,使用String.split() method with the limit parameter通常是个好主意,以避免StringBuilder

答案 1 :(得分:1)

当你附加一个null的字符串时,你会得到一个null。 e.g。

String a = null;
a += " hello"; // a = "null hello";

在您的情况下,您有一个lastName为null,但现在在null之后添加了一个名称。

查看正在发生的事情的最佳方法是在IDE中逐步调试代码。这将显示每行的功能。

你想要的是

String[] nameArr = name.split(" ", 2); // 1 or 2 elements.
firstName = nameArr[0]; // always at least one element.
lastName = nameArr.length > 1 ? nameArr[1] : "";