-3

使用此 substring() 时出现错误。我正在尝试获取 first、middle 和 last 的首字母,然后转换为大写。

public String initials() {
    String initials = first.substring(0, 1) + middle.substring(0, 1) 
            + last.substring(0, 1);
    return initials.toUpperCase();
}

那是代码,这是它给我的输出..

Exception in thread "main" java.lang.NullPointerException
null, null null at name.Name.initials(Name.java:75)
   at name.NameDriver.main(NameDriver.java:30)
   Java Result: 1

第 75 行是

String initials = first.substring(0, 1) + middle.substring(0, 1) 

NameDriver 中的第 30 行是

System.out.print(name1.initials());
4

2 回答 2

5

此错误与方法无关substring,似乎是因为firstmiddlelast为空,并且此方法只能在 String 上执行。

阻止此错误发生的最简单方法是在方法的开头添加类似这样的内容initials

if(first == null || middle == null || last == null) return "Not all names have been entered";

但是,您可能还需要考虑并非每个人都有中间名。

于 2013-08-24T14:30:52.260 回答
1

就像@Andy 刚刚回答的那样,只要防止这三个中的任何一个为空。也许只是创建和辅助功能,例如:

private static String firstLetter(String name) {
  if (name == null || name.isEmpty()) {
    return "";
  }
  return name.substring(0, 1);
}

然后,您可以将代码更改为:

public String initials() {
    String initials = firstLetter(first) + firstLetter(middle) + firstLetter(last);
    return initials.toUpperCase();
}
于 2013-08-24T15:15:54.187 回答