mysql isempty函数_判空使用isEmpty()方法?这个开发常识你别说自己不知道

在项目中,我们基本上都会有个StringUtils工具类,用来处理字符串相关的操作,比如:判空,长度,脱敏等。

今天有个小伙伴,因为调用别人提供的接口,接口里返回参数中有个String类型的。

小伙伴判空使用的是isEmpty()方法(大多数人认为这个方式没问题)。

但是问题来了:

接口返回的String类型参数不是空字符串,是个" "这样的字符串。

fb145353bbbdbe90799b265a6bd47fc4.png

这个isEmpty方法居然返回成了false,那就是没问题了,校验通过了,然后入库了。于是后面的业务逻辑就乱了,接着整条业务线都被坑惨了!他的年终奖也就这么凉凉了~

6cddabb66f0569ddd9da5a928466b30b.png

其实我们在项目中处理方式一般有两种:

一种是自定义工具类,这个我们就不扯了。另外一种是使用第三方的工具类,比如:

commons-lang3中

org.apache.commons.lang3.StringUtils。

public static boolean isEmpty(final CharSequence cs) {

return cs == null || cs.length() == 0;

}

public static boolean isBlank(final CharSequence cs) {

final int strLen = length(cs);

if (strLen == 0) {

return true;

}

for (int i = 0; i < strLen; i++) {

if (!Character.isWhitespace(cs.charAt(i))) {

return false;

}

}

return true;

}

spring-core中

org.springframework.util.StringUtils。

//判断是否为空

public static boolean isEmpty(Object str) {

return (str == null || "".equals(str));

}

//判断是否由内容

public static boolean hasText(String str) {

return (str != null && str.length() > 0 && containsText(str));

}

分析

上面两个第三方工具类的中isEmpty()方法判断是否为空,但是会有问题:如果其中存在" "这种字符串的时候,空白字符串是会认为不是空(业务代码中基本上都会把空白字符串处理成空,除非有非常特殊情况)。

isBlank()判断是否为空,处理了" "这种场景。所以如果项目中使用的是org.apache.commons.lang3.StringUtils时,建议使用isBlank()方法。

hasText()方法是判断是否存在内容,也处理了" "这种字符串,但是需要注意hasText()方法的返回值和isBlank()方法返回值是相反的。

示例

使用isEmpty()方法和isBlank()方法:

import org.apache.commons.lang3.StringUtils;

public class StringUtilDemo {

public static void main(String[] args) {

String name = "";

String name0 = " ";

System.out.println(StringUtils.isEmpty(name));

System.out.println(StringUtils.isEmpty(name0));

System.out.println(StringUtils.isBlank(name));

System.out.println(StringUtils.isBlank(name0));

}

}

输出:

true

false

true

true

空白字符串就认为不是空了,但是往往我们在业务代码处理过程中,也需要把空白字符串当做是空来处理,所以在使用的时候回留点心。

但是isBlank()方法却避免了这种空白字符串的问题。

使用isEmpty()方法和hasText()方法:

import org.springframework.util.StringUtils;

public class StringUtilDemo {

public static void main(String[] args) {

String name = "";

String name0 = " ";

System.out.println(StringUtils.isEmpty(name));

System.out.println(StringUtils.isEmpty(name0));

System.out.println(StringUtils.hasText(name));

System.out.println(StringUtils.hasText(name0));

}

}

输出:

true

false

false

false

isEmpty()方法也会把空白字符串当做不是空字符串。但是hasText()方法却能避免空白字符串的问题。

总结

永远不要指望别人返回来的字符串绝对没有空白字符串。

不是不推荐使用isEmpty(),而是看你的业务代码里是否把空白字符串当做空字符串来处理。

如果空白字符串是按照空字符串查来处理,那么推荐使用isBlank()方法或者hasText()方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库连接池是一种常见的技术方案,用于提高数据库连接的性能和效率。下面是一个简单的伪代码示例,展示如何使用Java实现数据库连接池。 ``` // 数据库连接池类 class ConnectionPool { // 数据库连接池的大小 private int poolSize; // 已经被使用的数据库连接 private List<Connection> usedConnections; // 可用的数据库连接 private List<Connection> availableConnections; // 构造函数初始化数据库连接池 public ConnectionPool(int poolSize) { this.poolSize = poolSize; usedConnections = new ArrayList<>(); availableConnections = new ArrayList<>(); for (int i = 0; i < poolSize; i++) { availableConnections.add(createNewConnection()); } } // 创建一个新的数据库连接 private Connection createNewConnection() { return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password"); } // 从连接池获取一个数据库连接 public synchronized Connection getConnection() { if (availableConnections.isEmpty()) { return null; // 当连接池已时,返回null } Connection connection = availableConnections.remove(0); usedConnections.add(connection); return connection; } // 将数据库连接放回连接池 public synchronized void releaseConnection(Connection connection) { usedConnections.remove(connection); availableConnections.add(connection); } } // 使用连接池的示例 public class Main { public static void main(String[] args) { ConnectionPool connectionPool = new ConnectionPool(10); // 创建一个大小为10的连接池 Connection connection1 = connectionPool.getConnection(); // 从连接池获取一个连接 // 使用连接进行数据库操作 // ... connectionPool.releaseConnection(connection1); // 将连接放回连接池 // ... Connection connection2 = connectionPool.getConnection(); // 从连接池获取一个连接 // 使用连接进行数据库操作 // ... connectionPool.releaseConnection(connection2); // 将连接放回连接池 // ... } } ``` 上述伪代码示例展示了如何使用资源池的思想来构建一个简单的数据库连接池。它维护了一个可用连接和一个被使用连接的列表,并提供了获取连接和释放连接的方法。通过使用连接池,可以有效地重复使用数据库连接,从而提高性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值