2013-08-24 24 views
-3

使用此substring()時出現錯誤。我正在嘗試獲取首字母,中間和最後的首字母,然後轉換爲大寫。substring()在Java中生成錯誤

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) 

線30 NameDriver是

System.out.print(name1.initials()); 
+1

哪裏是'first','middle'和'last'聲明並初始化? –

+0

它們被聲明爲私有字符串。它們被設置爲null。那麼當用戶輸入名稱時就會改變。 – user2703946

+3

最有可能一個或多個'first,middle,last'字符串變量爲空。 – anubhava

回答

5

此錯誤與無關方法,並且似乎是因爲firstmiddlelast爲空,且此方法只能在字符串上執行。

停止這種錯誤發生的歷史將在你initials方法的開始添加像這樣的最簡單方法:

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

但是,您可能還需要考慮到不是每個人都有一箇中間名稱。

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