public void doStuffWithString(String stringParam) { if(stringParam.equals("MyStringValue")) { // do stuff } }
public void safeDoStuffWithString1(String stringParam) { if(stringParam != null && stringParam.equals("MyStringValue")) { // do stuff } } public void safeDoStuffWithString2(String stringParm) { if("MyStringValue".equals(stringParam)) { // do stuff } }
我本人不喜歡上面的兩個方法,第一個看起來太臃腫,第二個看起來像錯誤的。這裏咱們就能夠用一些StringUtils類了,這個類提供的equals方法是空指針安全的,不用擔憂傳遞給他的是什麼參數,他不會拋出空指針異常,這樣寫: java
public void safeDoStuffWithString3(String stringParam) { if(StringUtils.equals(stringParam,"MyStringValue)) { // do stuff } }
if(myString != null && !myString.isEmpty()) { // 有點臃腫是把? // Do stuff with myString } if(StringUtils.isNotEmpty(myString)) { // 好多了吧 // Do stuff with myString }
String someWhiteSpace = " \t \n"; StringUtils.isEmpty(someWhiteSpace); // false StringUtils.isBlank(someWhiteSpace); // true
固然,這個方法相對於String.split也是空指針安全的,當你嘗試split一個null字符串的時候,將返回Null,一個Null的分隔符將按照空白字符分隔字符串,可是,還有一個理由讓你可考慮使用StringUtils.split()方法,就是jdk自帶的String.split因爲支持正則表達式進行分隔,因此可能帶來意想不到的後果,例如: 正則表達式
public void possiblyNotWhatYouWant() { String contrivedExampleString = "one.two.three.four"; String[] result = contrivedExampleString.split("."); System.out.println(result.length); // 0 }
String[] numbers = {"one", "two", "three"}; StringUtils.join(numbers,","); // returns "one,two,three"