空字符串字符串不为空_当字符串为空但不为空时
空字符串字符串不為空
介紹
我團(tuán)隊(duì)中的一名初級(jí)程序員遇到了一個(gè)有趣的錯(cuò)誤。 我已經(jīng)不止一次看到它的癥狀。 這篇文章是尋找什么以及如何在將來防止它。 我還將探討該問題的不同解決方案。
病征
有問題的代碼看起來做得不錯(cuò)。:
if(trouble != null && !trouble.isEmpty()) { System.out.println(“fine here: ” + trouble); } else { System.out.println(“not so fine here: ” + trouble); }該代碼將命中“ fine here”塊,但將輸出“ null”值。 通過讀取文件來設(shè)置變量。
調(diào)查中
我和開發(fā)人員查看了打印件并進(jìn)行了幾次測試,但結(jié)果卻相同。 我看了在哪里設(shè)置變量。 如果那里什么也沒有,它應(yīng)該將值設(shè)置為null,但是打印輸出表明該值為null。 我有一個(gè)主意,我們決定進(jìn)行測試。 他更改了代碼:
if(trouble != null && !trouble.isEmpty() && !trouble.equals(“null”)) { System.out.println(“fine here”); } else { System.out.println(“not so fine here”); }每次測試都進(jìn)行到“這里不太好”。 似乎該值設(shè)置為字符串“ null”而不是值null。
學(xué)什么
說實(shí)話,我以前已經(jīng)看過了。 我花了大約一天的時(shí)間開始執(zhí)行相同的代碼來弄清楚它。 我從中了解到,參數(shù)檢查仍然是一件好事。 我發(fā)現(xiàn)有效的字符串檢查可以在代碼中的多個(gè)地方使用。 為了防止復(fù)制和粘貼反模式,我將驗(yàn)證抽象為一個(gè)方法。
private static boolean isValidString(String test) { boolean isValid = (test != null && !test.isEmpty() && !test.equals(“null”)); return isValid; }防止越來越長的驗(yàn)證行的下一步是將其抽象到驗(yàn)證對(duì)象。 這允許一個(gè)骯臟的單詞列表。
public class StringValidator { private List<String> dirtyWords;public static final int ARRAY_SIZE = 20; public StringValidator() { dirtyWords = new ArrayList(ARRAY_SIZE); }public boolean isValid(String test) { boolean isValid = false; isValid = (test != null) && !test.isEmpty(); if(isValid) { for(String word: dirtyWords) { if(word.equals(test)) { isValid = false; break; } } } return isValid; }public void addDirtyWord(String word) { if(!isValidString(word)){ throw new IllegalArgumentException(word + ” is not a good dirty word”); }dirtyWords.add(word); }private boolean isValidString(String test) { return ((test != null) && !test.isEmpty()); } }which leads to this parameter checking code:if(validator.isValid(trouble)) { System.out.println(“fine here”); } else { System.out.println(“not so fine here”); }結(jié)論
有時(shí)我們需要跳出框框思考一下問題。 讓您對(duì)問題有第二眼的感覺并不難; 這也許是發(fā)生的最好的事情。 我探索了最終創(chuàng)建驗(yàn)證器的解決方案,該驗(yàn)證器無需經(jīng)過冗長而令人困惑的測試即可包含臟詞列表。
翻譯自: https://www.javacodegeeks.com/2014/10/when-a-string-is-null-but-not-null.html
空字符串字符串不為空
總結(jié)
以上是生活随笔為你收集整理的空字符串字符串不为空_当字符串为空但不为空时的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 庐山在哪个省份哪个城市(盘点庐山风景区的
- 下一篇: 联想m340e主板插电脑(联想e40笔记