StringUtils里的isEmpty方法和isBlank方法的区别详解

前言

我们常说的字符串为空,其实就是一个没有字符的空数组。比如:

String a = "";

a 就可以称为是一个空字符串。由于 String 在 Java 中底层是通过 char 数组去存储字符串的,所以空字符串对应的 char 数组表现形式为

private final char value[] = new char[0];

但实际工作中,我们需要对字符串进行一些校验,比如:是否为 null,是否为空,是否去掉空格、换行符、制表符等也不为空。我们一般都是通过一些框架的工具类去做这些判断,比如:apache 的 commons jar 包。下面就讲述一下常见的两个字符串校验方法以及它们的区别。

isEmpty()

public static boolean isEmpty(String str) {
  return str == null || str.length() == 0;
}

isBlank()

public static boolean isBlank(String str) {
    int strLen;
    if (str != null && (strLen = str.length()) != 0) {
      for(int i = 0; i < strLen; ++i) {
        // 判断字符是否为空格、制表符、tab
        if (!Character.isWhitespace(str.charAt(i))) {
          return false;
        }
      }
      return true;
    } else {
      return true;
    }
  }

结论

通过以上代码对比我们可以看出:

1.isEmpty 没有忽略空格参数,是以是否为空和是否存在为判断依据。

2.isBlank 是在 isEmpty 的基础上进行了为空(字符串都为空格、制表符、tab 的情况)的判断。(一般更为常用)

大家可以看下面的例子去体会一下。

StringUtils.isEmpty("yyy") = false
StringUtils.isEmpty("") = true
StringUtils.isEmpty("  ") = false

StringUtils.isBlank("yyy") = false
StringUtils.isBlank("") = true

实例展示

自定义判断方法,实现同样的判断逻辑

  /**
   * 判断对象是否为null,不允许空白串
   *
   * @param object  目标对象类型
   * @return
   */
  public static boolean isNull(Object object){
    if (null == object) {
      return true;
    }
    if ((object instanceof String)){
      return "".equals(((String)object).trim());
    }
    return false;
  }

  /**
   * 判断对象是否不为null
   *
   * @param object
   * @return
   */
  public static boolean isNotNull(Object object){
    return !isNull(object);
  }
System.out.println(StringHandler.isNull(null));    //true
System.out.println(StringHandler.isNull(""));     //true
System.out.println(StringHandler.isNull("  "));    //true
System.out.println(StringHandler.isNull("dd"));    //false

通常我们通过HttpServletRequest获取到的参数,需要经过判空处理,转型然后得到我们想要的值,这里可以进行这些操作的简单封装.如下

    /**
   * 从<code>HttpServletRequest</code>中获取<code>String</code>类型的值, 不允许传递空串
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */
  public static final String getString(HttpServletRequest request,String paramName){
    return getString(request, paramName, false);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>String</code>类型的值
   *
   * 如果传递过来的参数为包含空白字符串的字符,认为为有效值, 否则返回null
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */
  public static final String getString(HttpServletRequest request,String paramName,boolean isWithSpace) {
    String tmp = request.getParameter(paramName);
    if(isWithSpace){
      //如果允许包含空格,则使用isEmpty判空
      if (!StringUtils.isEmpty(tmp)){
        return tmp;
      }
    }else{
      if(!StringUtils.isBlank(tmp)){
        return tmp;
      }
    }
    return null;
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Long</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */
  public static final Long getLong(HttpServletRequest request,String paramName) {
    return getLong(request, paramName, -1L);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Long</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @param defaultValue
   *               默认值
   * @return
   *               返回需要的值
   */
  public static final Long getLong(HttpServletRequest request,String paramName,Long defaultValue) {
    String tmp = request.getParameter(paramName);
    if (!StringUtils.isBlank(tmp)){
      try {
        Long value = Long.parseLong(tmp);
        return value;
      } catch (NumberFormatException e) {
        return -1L;
      }
    }
    return defaultValue;
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Integer</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */

  public static final Integer getInt(HttpServletRequest request,String paramName) {
    return getInt(request,paramName, -1);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Integer</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @param defaultValue
   *               默认值
   * @return
   *               返回需要的值
   */
  public static final Integer getInt(HttpServletRequest request,String paramName, int defaultValue) {
    String tmp = request.getParameter(paramName);
    if (!StringUtils.isBlank(tmp)){
      try {
        Integer value = Integer.parseInt(tmp);
        return value;
      } catch (NumberFormatException e) {
        return -1;
      }
    }
    return defaultValue;
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Short</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */

  public static final Short getShort(HttpServletRequest request,String paramName) {
    return getShort(request,paramName, (short)-1);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Short</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @param defaultValue
   *               默认值
   * @return
   *               返回需要的值
   */
  public static final Short getShort(HttpServletRequest request,String paramName, short defaultValue) {
    String tmp = request.getParameter(paramName);
    if (!StringUtils.isBlank(tmp)){
      try {
        Short value = Short.parseShort(tmp);
        return value;
      } catch (NumberFormatException e) {
        return (short)-1;
      }
    }
    return defaultValue;
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Byte</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */

  public static final Byte getByte(HttpServletRequest request,String paramName) {
    return getByte(request,paramName, (byte)-1);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Byte</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @param defaultValue
   *               默认值
   * @return
   *               返回需要的值
   */
  public static final Byte getByte(HttpServletRequest request,String paramName, Byte defaultValue) {
    String tmp = request.getParameter(paramName);
    if (!StringUtils.isBlank(tmp)){
      try {
        Byte value = Byte.parseByte(tmp);
        return value;
      } catch (NumberFormatException e) {
        return (byte)-1;
      }
    }
    return defaultValue;
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Double</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */
  public static final Double getDouble(HttpServletRequest request,String paramName) {
    return getDouble(request, paramName,-1D);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Double</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @param defaultValue
   *               默认值
   * @return
   *               返回需要的值
   */
  public static final Double getDouble(HttpServletRequest request,String paramName, Double defaultValue) {
    String tmp = request.getParameter(paramName);
    if (!StringUtils.isBlank(tmp)){
      try {
        Double value = Double.parseDouble(tmp);
        return value;
      } catch (NumberFormatException e) {
        return -1D;
      }
    }
    return defaultValue;
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Float</code>类型的值
   *
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @return
   *               返回需要的值
   */
  public static final Float getFloat(HttpServletRequest request,String paramName) {
    return getFloat(request, paramName,-1F);
  }

  /**
   * 从<code>HttpServletRequest</code>中获取<code>Float</code>类型的值
   *
   * @param request
   *               @see HttpServletRequest
   * @param paramName
   *               参数名称
   * @param defaultValue
   *               默认值
   * @return
   *               返回需要的值
   */
  public static final Float getFloat(HttpServletRequest request,String paramName, Float defaultValue) {
    String tmp = request.getParameter(paramName);
    if (!StringUtils.isBlank(tmp)){
      try {
        Float value = Float.parseFloat(tmp);
        return value;
      } catch (NumberFormatException e) {
        return -1F;
      }
    }
    return defaultValue;
  }

到此这篇关于StringUtils里的isEmpty方法和isBlank方法的区别详解的文章就介绍到这了,更多相关StringUtils isEmpty isBlank 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • javaScript字符串工具类StringUtils详解

    本文实例为大家分享了javaScript字符串工具类的具体代码,供大家参考,具体内容如下 StringUtils = { isEmpty: function(input) { return input == null || input == ''; }, isNotEmpty: function(input) { return !this.isEmpty(input); }, isBlank: function(input) { return input == null || /^\s*$/.t

  • 基于StringUtils工具类的常用方法介绍(必看篇)

    前言:工作中看到项目组里的大牛写代码大量的用到了StringUtils工具类来做字符串的操作,便学习整理了一下,方便查阅. isEmpty(String str) 是否为空,空格字符为false isNotEmpty(String str) 是否为非空,空格字符为true isBlank(String str) 是否为空,空格字符为true isNotBlank(String str) 是否为非空,空格字符为false trim(String str)去除字符串两端的控制符,空字符串.null

  • StringUtils工具包中字符串非空判断isNotEmpty和isNotBlank的区别

    在项目中,我们用的最多的是StringUtils中的非空判断方法,相信大部分人都用过IsNotEmpty或者isEmpty方法 今天我们要提到的,是isNotBlank public static boolean isNotEmpty(String str) 判断某字符串是否非空,等于!isEmpty(String str),这里不能排除空格字符 下面是示例: StringUtils.isNotEmpty(null) = false StringUtils.isNotEmpty("")

  • Java StringUtils字符串分割转数组的实现

    我们在日常开发时会经常遇到将一个字符串按照指定的字符进行分割. 这时,我们往往会想到使用str.split(","),进行处理得到分割后的数组. 然而, 使用split()方法在分割特殊的字符时是需要转移的.如小数点"." 下面我为大家推荐一种可以无需转义,即可分割的方法. 使用 org.springframework.util.StringUtils 中的 delimitedListToStringArray(str,delimiter) 进行测试 public

  • java自定义封装StringUtils常用工具类

    自定义封装StringUtils常用工具类,供大家参考,具体内容如下 package com.demo.utils; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 字符串操作工具类 * @author dongyangyang * @Date 2016/12/28 23:12 * @Version 1.0 * */ public class StringUtils { /** * 首字

  • Java中StringUtils工具类的一些用法实例

    StringUtils 方法的操作对象是 java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码). 除了构造器,StringUtils 中一共有130多个方法,并且都是 static 的,所以我们可以这样调用 StringUtils.x

  • Java中StringUtils工具类进行String为空的判断解析

    判断某字符串是否为空,为空的标准是str==null或str.length()==0 1.下面是StringUtils判断是否为空的示例: StringUtils.isEmpty(null) = true StringUtils.isEmpty("") = true StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空处理 StringUtils.isEmpty(" ") = fals

  • 详解Spring的StringUtils踩坑记录

    起因 最近在写CRUD的时候,发现有个分页的VO写的健壮性比较差,一时手痒改了一下,没想到改了之后好几个功能都出现了问题. 原VO关键代码如下: public class PageVo implements Serializable{ // ...省略所有无关代码 Map<String, String> query } 这个VO是用于从前端分页查询时传参,而query是用于传递查询条件的(这里不讨论用Map传参是否合理).当前端无查询条件时则会导致query为null,如果不注意容易出现NPE

  • StringUtils里的isEmpty方法和isBlank方法的区别详解

    前言 我们常说的字符串为空,其实就是一个没有字符的空数组.比如: String a = ""; a 就可以称为是一个空字符串.由于 String 在 Java 中底层是通过 char 数组去存储字符串的,所以空字符串对应的 char 数组表现形式为 private final char value[] = new char[0]; 但实际工作中,我们需要对字符串进行一些校验,比如:是否为 null,是否为空,是否去掉空格.换行符.制表符等也不为空.我们一般都是通过一些框架的工具类去做这

  • 基于js 各种排序方法和sort方法的区别(详解)

    今天突发奇想,想明白sort方法是否比各种排序都有优势,所以就参考别人的代码,做了一个测试,结果令人惊讶啊,上代码. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,max

  • 对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标签. 2 predict_classes()方法 当使用predict_classes()方法进行预测时,返回的是类别的索引,即该样本所属的类别标签.以卷积神经网络中的图片分类为例说明,代码如下: 补充知识:keras中model.evaluate.model.predict和model.predi

  • C#中Abstract方法和Virtual方法的区别

    简介: c#中Abstract和Virtual比较容易混淆,都与继承有关,并且涉及override的使用.virtual可以被子类重写,而abstract必须被子类重写.virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现.它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的.毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的.下面

  • 详解java中List中set方法和add方法的区别

    目录 前言 相同点 不同点 总结 前言 在Java中的常用的集合接口List中有两个非常相似的方法: E set(int index, E element); void add(int index, E element); 这两个方法都是在集合的指定位置插入指定的元素,那么这两个方法到底有什么区别呢?接下来我们通过ArrayList这个我们常用集合实现来看一下这两个方法的差异 相同点 首先我们来看一下这两个方法在ArrayList中的相同点 他们都会在集合的指定位置插入新的元素,例如下面的例子:

  • Android ListView里控件添加监听方法的实例详解

    Android ListView里控件添加监听方法的实例详解 关于ListView,算是android中比较常见的控件,在ListView我们通常需要一个模板,这个模板指的不是住模块,而是配置显示在ListView里面的东西,今天做项目的时候发现想要添加一个ImageView监听方法,发现崩了,也许是好久没有动ListView竟然忘了不能直接在主UI的xml文件里面调用其他xml文件的控件,哪怕ListView用的是这个xml文件. [错误示范]: 直接调用ImageView这个控件是ListV

  • Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算. sets 支持 x in set, len(set),和 for x in set.作为一个无序的集合,sets不记录元素位

  • 基于js 字符串indexof与search方法的区别(详解)

    1.indexof方法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. 语法: 注意:有可选的参数(即设置开始的检索位置). 2.search方法 search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串. 注意:search方法可以根据正则表达式查找指定字符串(可以忽略大小写,并且不执行全局检索),同时没有可选参数(即设置开始的检索位置). 以上这篇基于js 字符串indexof与search方法的区别(详解)就是小编分享给大家的全部

  • 对python requests的content和text方法的区别详解

    问题: 一直在想requests的content和text属性的区别,从print 结果来看是没有任何区别的 看下源码: @property def text(self): """Content of the response, in unicode. If Response.encoding is None, encoding will be guessed using ``chardet``. The encoding of the response content is

  • 在Pytorch中计算卷积方法的区别详解(conv2d的区别)

    在二维矩阵间的运算: class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True) 对由多个特征平面组成的输入信号进行2D的卷积操作.详解 torch.nn.functional.conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1)

随机推荐