空字符串字符串不为空_当字符串为空但不为空时

空字符串字符串不为空

介绍

我团队中的一名初级程序员遇到了一个有趣的错误。 我已经不止一次看到它的症状。 这篇文章是寻找什么以及如何在将来防止它。 我还将探讨该问题的不同解决方案。

病征

有问题的代码看起来做得不错。:

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

空字符串字符串不为空

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络通信协议-TCP/IP模型实战

今晚课题长按图片【识别图中的二维码】

java家具网站需求分析_基于jsp的家具销售-JavaEE实现家具销售 - java项目源码

基于jspservletpojomysql实现一个javaee/javaweb的家具销售, 该项目可用各类java课程设计大作业中, 家具销售的系统架构分为前后台两部分, 最终实现在线上进行家具销售各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类家具销售相关的实体进行管理。该家具…

hazelcast入门教程_Hazelcast入门指南第2部分

hazelcast入门教程本文是我开始使用Hazelcast &#xff08;分布式内存数据库&#xff09;的系列文章的继续。 如果尚未阅读第一篇文章&#xff0c;请单击此处 。 分布式馆藏 Hazelcast具有许多可用于存储数据的分布式集合。 以下是它们的列表&#xff1a; 清单 我设置 队列…

C/C++深入剖析指针机制与内存动态管理

今晚课题【长按识别图中二维码】

jedis watch Java_jedis操作redis的几种常见方式总结

Redis是一个著名的key-value存储系统&#xff0c;也是nosql中的最常见的一种&#xff0c;这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式&#xff0c;文中给出了详细的示例代码供大家参考学习&#xff0c;需要的朋友们下面来一起看看吧。前言Redis是一个著…

C/C++打造Windows岁月留声机

今晚课题【长按识别图中二维码】

hazelcast入门教程_Hazelcast入门指南第1部分

hazelcast入门教程介绍 我将在Hazelcast上做一个系列。 我从Twitter了解了该产品。 他们决定跟随我&#xff0c;经过对他们所做工作的研究后&#xff0c;我决定跟随他们。 我在推特上说&#xff0c;Hazelcast将是分布式密码破解者的重要Struts。 这引起了一些兴趣&#xff0c;我…

java演出厅选票_高仿猫眼电影选座(选票)模块-b

上图看效果先&#xff1a;1)画座位图其实不是很难一般数据都会给坐标&#xff0c;将坐标对应座位画出来就可以了&#xff0c;主要是开场动画要设置默认大小&#xff0c;还有座位图的数量也不是固定的&#xff0c;所以在初始化座位图的时侯就默认算出了整个座位图的大小-(instan…

input发送a.jax_Java EE 7 / JAX-RS 2.0 – REST上的CORS

input发送a.jaxJava EE REST应用程序在开箱即用的开发机器上通常可以很好地运行&#xff0c;在该机器上&#xff0c;所有服务器端资源和客户端UI都指向“ localhost”或127.0.0.1。 但是&#xff0c;当涉及跨域部署时&#xff08;当REST客户端不再与托管REST API的服务器位于同…

用C/C++开发《Photoshop》图像处理软件

今晚课题【长按识别图中二维码】

javaone_代理的JavaOne 2014观察

javaone我今年无法参加JavaOne&#xff0c;但很高兴看到一些在线资源涵盖了JavaOne 2014的活动。在本文中&#xff0c;我总结了JavaOne 2014的一些观察结果&#xff0c;并提供了指向提供这些观察结果的参考的链接。提供有关这些观察的更多背景细节。 列出的观察结果没有特别的顺…

java怎么兼容switch_java – Switch语句给出了不兼容类型错误

我正在尝试编译,我收到此错误&#xff1a;enigma/Rotor.java:30: incompatible types found : java.lang.String required: int switch(name){1 error为什么我收到此错误&#xff1f;我如何解决它&#xff1f;它在包中,我似乎无法弄明白.这是代码&#xff1a;String label;Roto…

基于java的心理健康_基于SSM的JAVA心理健康网

今天记录的项目是心理健康网的规划与设计&#xff0c;这个项目是这么回事&#xff1a;心理健康是关系到人才质量的重要问题。随着网络时代的发展,传统的大学生心理健康教育教学方式和课程资源远不能解决当代大学生的心理问题。本文通过对学生心理健康网的规划与设计进行研究。首…

C/C++打造《百万级人脸识别系统》

今晚课题【长按识别图中二维码】

rhq监控软件_RHQ指标的WildFly子系统

rhq监控软件对于RHQ-Metrics&#xff0c;我已经开始为WildFly 8编写一个子系统&#xff0c;该子系统能够在WildFly内收集度量&#xff0c;然后以固定的时间间隔&#xff08;当前为每分钟&#xff09;将其发送到RHQ-Metrics服务器。 下一张图是该发件人连续运行1.5天时结果的可…

java中content啥意思_JSTL标签中的body-content标签体内容输出格式的介绍

我们在JSTL标签中看到“JSP”这种类型的定义&#xff0c;但是不知道它是什么意思&#xff0c;其实它的意思就是定义了一个JSTL标签内部是否允许使用JSP表达式&#xff0c;先来了解什么是JSTL标签体&#xff0c;请看代码&#xff1a;//中间即为JSTL标签体再来看看什么是jsp表达式…

打造最强加密工具之《绝密信息传递》

今晚课题【长按识别图中二维码】

jooq sql_用jOOQ用Java编写SQL

jooq sqljOOQ是“数据库优先”类型的安全SQL API&#xff0c;使您可以直观地用Java编写SQL&#xff0c;就像Java编译器本身支持SQL语言一样。 所有数据库模式&#xff0c;表&#xff0c;列&#xff0c;过程和其他对象均作为Java对象提供&#xff0c;可以直接在jOOQ SQL API中使…

C/C++打造经典推箱子小游戏

今晚课题【长按识别图中二维码】