当字符串为空但不为空时
介绍
我团队中的一名初级程序员遇到了一个有趣的错误。 我已经不止一次看到它的症状。 这篇文章是寻找什么以及将来如何防止它。 我还将探讨该问题的不同解决方案。
病征
有问题的代码看起来做得不错。:
if(trouble != null && !trouble.isEmpty()) {
System.out.println(“fine here: ” + trouble);
} else {
System.out.println(“not so fine here: ” + trouble);
}
该代码将命中“ fine here”块,但将输出“ null”值。 通过读取文件来设置变量。
调查中
我和开发人员查看了打印件并进行了几次测试,但结果却相同。 我看了在哪里设置变量。 如果那里什么也没有,它应该将值设置为null,但是打印输出表明该值为null。 我有一个主意,我们决定进行测试。 他更改了代码:
if(trouble != null && !trouble.isEmpty() && !trouble.equals(“null”)) {
System.out.println(“fine here”);
} else {
System.out.println(“not so fine here”);
}
每次测试都进行到“这里不太好”。 似乎该值被设置为字符串“ null”而不是值null。
学什么
说实话,我以前已经看过了。 我花了大约一天的时间开始执行相同的代码来弄清楚它。 我从中了解到,参数检查仍然是一件好事。 我发现有效的字符串检查可以在代码中的多个地方使用。 为了防止复制和粘贴反模式,我将验证抽象为一个方法。
private static boolean isValidString(String test) {
boolean isValid = (test != null && !test.isEmpty() && !test.equals(“null”));
return isValid;
}
防止越来越长的验证行的下一步是将其抽象到验证对象。 这允许一个肮脏的单词列表。
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”);
}
结论
有时我们需要跳出框框思考一下问题。 让您对问题有第二眼的感觉并不难; 这也许是发生的最好的事情。 我探索了最终创建验证器的解决方案,该验证器无需经过冗长而令人困惑的测试即可包含脏词列表。
翻译自: https://www.javacodegeeks.com/2014/10/when-a-string-is-null-but-not-null.html
当字符串为空但不为空时相关推荐
- 算法-打印一个字符串的全部子序列,包括空字符串
题目:打印一个字符串的全部子序列,包括空字符串 假如该字符串为"abc"则用画图的方式穷举所有可能 代码如下: public class PrintAllSubsquences { ...
- java中,字符串和集合判断是否为空
字符串: 集合: 不为空 转载于:https://www.cnblogs.com/Dandwj/p/9431702.html
- 税收java_String 类中的 isEmpty() 是判断字符串是否为空的,如果为空返回 true ,不为空返回 false 。 (1.0分)_学小易找答案...
[填空题]Claudia möchte sich mit ihrem Kollegen Tobias treffen: Tobias, ich möchte gern mit ins Kino g ...
- Oracle数据库里面查询字符串类型的字段不为空和为空的SQL语句:
摘要:近期项目中,在做高级查询的时候有个条件是根据选择的字段,然后再选择字段的值为空和不为空做查询,在写SQL语句的时候费了很长时间,现在记录一下,方便日后查看: 一:查询字符串类型的字段的值不为空的 ...
- 查漏补缺——字符串www.qq.com所有非空子串
子串与子序列总结了笔记,并分享出来.有问题请及时联系博主:Alliswell_WP,转载请注明出处. (腾讯笔试题)选择题:字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数 ...
- Excel单元格空,设置为空字符串
Java使用hutool工具类解析Excel,单元格空,赋值为空字符串 ExcelReader jobExcel = ExcelUtil.getReader(file.getInputStream() ...
- 打印一个字符串的全部子序列,包括空字符串
package class_08;import java.util.ArrayList; import java.util.List; /*** * 打印一个字符串的全部子序列,包括空字符串**/ p ...
- mysql 5.1由于Host为localhost的用户为空,密码为空,导致本地用户无法登陆。
不说了.直接上mysql的用户数据,第四列里面,host为localhost,用户为空,密码为空. 导致在本地登陆的时候除了root的账户外,其他账号不需要密码即可登陆,并且影响host为 %的用户登 ...
- 子串、真子串、非空子串、非空真子串的求解方法(数据结构)
** 字串.真子串.非空子串.非空真子串的求解方法 ** Eg:串S="software" 子串的求解方法 n(n+1)/2 +1 此处n为8,所以串S的子串为37 真子串的求解方 ...
- android空包签名,安卓空包签名教程
**准备:** **windows签名工具(****点击下载签名工具:**[windows签名工具.zip]链接:https://pan.baidu.com/s/1CSelhAtmjHgzXuwXCJ ...
最新文章
- of介词短语作定语_如何区分介词短语作状语还是作定语
- 为什么我们总是「习惯性辩解」?
- go实现数组切片洗牌函数Shuffle
- CCF201604-3 路径解析(解法三)(90分)(废除!!!)
- 一、CXF WebService准备工作
- aode matlab程序,三大计算机视觉和机器学习库的算法汇总
- 网络蚂蚁(netants) v1.25 中文版 绿色
- 相亲交友婚恋活动报名小程序开发制作功能
- 小程序中使用全局样式
- 南京工程学院计算机博士,南京工程学院高层次人才引进工作实施办法(修订)...
- 基于银河麒麟 V10 系统安装和卸载 DM8 数据库
- 北京地标《信息化项目软件开发费用测算规范》完成公开征求意见
- 宁王比神联手,率锂电池和材料厂,决战锂矿
- access如何设置定期报表汇总_Access如何制作复杂报表
- [一起看海吧]2021.5.1秦皇岛北戴河之旅游记
- windows server 2008磁盘管理
- Android面向切面(AOP)编程实战
- 导数的奇偶性(含证明)
- [HAOI2010]软件安装 [Tarjan + 树形DP]
- 计算机二级c语言选择题及答案,全国计算机二级c语言练习题及答案
热门文章
- ReviewForJob——二叉堆优先队列的实现(三种堆节点类型——int + struct HeapNode + struct HeapNode*)
- 如何用for循环出数据库的数据
- JDBC的SQL注入漏洞
- restful rest_HATEOAS的RESTful服务。 超媒体:REST的秘密要素
- jetty java_Jetty,Java和OAuth入门
- junit junit_穿越JUnit流
- java rop_Java命令行界面(第23部分):Rop
- wso2 安装_WSO2注册表安装简介
- 本地缓存防止缓存击穿_防止缓存爆炸的快速提示
- web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件