所以我创建了一个名称类,并使用数组来存储名字和姓氏,并使用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 ......我无法弄清楚为什么= [
答案 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] : "";