精华内容
下载资源
问答
  • String判空

    2021-07-12 12:00:42
    String判空 文章目录String判空前言一、从DTO判断是否为空1.注解@NotBlank二、从业务代码里判空1.基础判空,判断字符串是否为null,或长度是否小于等于02.传统校验,常用方法3.方法校验总结 前言 常在业务代码中...

    String判空


    前言

    常在业务代码中出现大量需要判空的业务情况,此处做个笔记记录


    一、从DTO判断是否为空

    优点:从入参开始判断,节省资源

    1.注解@NotBlank

    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
    @Repeatable(NotBlank.List.class)
    public @interface NotBlank {
       String message() default "{javax.validation.constraints.NotBlank.message}";
    
       Class<?>[] groups() default {};
    
       Class<? extends Payload>[] payload() default {};
    
    @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
    @Retention(RetentionPolicy.RUNTIME)
     @Documented
     public @interface List {
        NotBlank[] value();
      }
    

    1、从源码来看该注解可以用在METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER,TYPE_USE上面
    2、可以单独用,默认会给message模版,具体要返回message就是

    @NotBlank(message=“要返回的message”)
    

    3、支持group分组,组内判断是否为空,默认既是未分组

    @NotBlank(groups = {Save.class}
    

    官方默认给四个组,增删改查组
    官方默认给四个组,增删改查组

    二、从业务代码里判空

    优点:判空的拓展性增强

    1.基础判空,判断字符串是否为null,或长度是否小于等于0

    if(string == null || string.length() <= 0)
    

    2.传统校验,常用方法

    if(string == null || string.equals(""))
    

    3.方法校验

    if(StringUtils.isBlank(string))
    

    源码:

    public static boolean isBlank(CharSequence cs) {
      int strLen;
      if (cs != null && (strLen = cs.length()) != 0) {
        for(int i = 0; i < strLen; ++i) {
          if (!Character.isWhitespace(cs.charAt(i))) {
            return false;
          }
        }
    
        return true;
      } else {
        return true;
      }
    }
    

    如果string为null或者长度为0,或者string内部为制表符、换行符、换页符和回车,
    完成三项校验
    StringUtils内部还有isEmpty方法
    源码:

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

    源码来看本质其实就是第一种基础判空,要调用的话其实第一种方法更快,调用isEmpty还有兼容风险

    总结

    此为记录项,欢迎评论下方指正
    展开全文
  • String判空效率比较

    千次阅读 2017-12-21 20:01:17
    (导入自己博客园的文章) String判空效率比较 今天逛社区时忽然看到以下博主时的博文,说字符串判空的效率,觉得口说无凭,于是自己手动测试了一下,以下是我的测试代码,不足之处,还望大神指教 ...
    (导入自己博客园的文章) 
    

    String判空效率比较

    今天逛社区时忽然看到以下博主时的博文,说字符串判空的效率,觉得口说无凭,于是自己手动测试了一下,以下是我的测试代码,不足之处,还望大神指教

    http://blog.csdn.net/fengxuezhiye/article/details/7763384

    1.下面是测试100万次的代码

    复制代码
     1 package testData;
     2 
     3 public class TestData {
     4     public static void main(String[] args) {
     5         //不需要导入包
     6         //在你的方法第一行加上:
     7         //long a=System.currentTimeMillis();
     8         //在最好的一行加上:
     9         //System.out.println("\r<br>执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");
    10                 String name="";
    11                 String name2="aa";
    12                 String name3=null;
    13         //        测试空
    14         long a=System.currentTimeMillis();
    15         for(int i=0;i<1000000;i++){
    16         if(name == null || name.equals("")){
    17             
    18         }
    19         }
    20         System.out.println("\r<br>执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");    
    21 //        测试长度
    22         long a2=System.currentTimeMillis();
    23         for(int i=0;i<1000000;i++){
    24         if(name == null || name.length() <= 0){
    25         
    26         }
    27         }
    28         System.out.println("\r<br>执行耗时 : "+(System.currentTimeMillis()-a2)/1000f+" 秒 ");    
    29     }
    30 }
    复制代码

     

    以下是三次运行的效果

    (1)

    (2)

    (3)

     

    2.下面是1万次的测试结果

      

     

    3.结果 事实证明  比较长度确实比比较空效率 高

      但是我不甘心如此,又去网上搜了其他资料

    以下是搜集的资料

      1.关于String str =  “abc” 的内部工作。Java内部将此语句转化为以下多个 步骤:      
         
      (1 )先定义一个名为str的对String类的对象引用变量:String str;      
         
      (2 )在栈中查找有没有存放值为 “abc” 的地址,如果没有,则开辟一个存放字面值为 “abc” 的地址,接着建立 一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为 “abc” 的地址,则查找对象o,并返回o的地址。     
    (3 )将str指向对象o的地址。      
         
      值得留心 的是,一般String类中字符串值都是直接存值的。但像String str = “abc” ;这种场合下,其字符串值却是保存了一个指向存在栈中数据的引用!      
         2.官方的String的equals的重写源码

    复制代码
     1 public boolean equals(Object anObject) {
     2     if (this == anObject) {
     3         return true;
     4     }
     5     if (anObject instanceof String) {
     6         String anotherString = (String)anObject;
     7         int n = count;
     8         if (n == anotherString.count) {
     9         char v1[] = value;
    10         char v2[] = anotherString.value;
    11         int i = offset;
    12         int j = anotherString.offset;
    13         while (n-- != 0) {//看到这忽然就明白了
    14             if (v1[i++] != v2[j++])
    15             return false;
    16         }
    17         return true;
    18         }
    19     }
    20     return false;
    21     }
    复制代码

     

    瞬间明朗了,吃饭!

     

    标签: 性能
    0
    0

    « 上一篇: myeclipse数据库逆向hibernate教程
    » 下一篇: 干货分享,排序自己收集的单词,并且计算是否重复
        </div>
        <div class="postDesc">posted @ <span id="post-date">2016-07-03 14:59</span> <a href="http://www.cnblogs.com/thehugo/">果果爱吃苹果</a> 阅读(<span id="post_view_count">75</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=5638011" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(5638011);return false;">收藏</a></div>
    </div>
    
    展开全文
  • String判空工具类总结

    2021-04-23 17:28:18
    String判空工具类总结 说明: StringUtils类似的工具类有很多,包括Spring支持的,apche的,还有自定义的,接下来我总结下我日常遇到过的StringUtils,还有这些api我特别容易搞混,所以这次整理记录一下 直接上代码 ...

    String判空工具类总结

    说明:

    StringUtils类似的工具类有很多,包括Spring支持的,apche的,还有自定义的,接下来我总结下我日常遇到过的StringUtils,还有这些api我特别容易搞混,所以这次整理记录一下

    直接上代码

    package com.example.demo;
    
    import cn.hutool.core.util.StrUtil;
    import org.junit.jupiter.api.Test;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.util.StringUtils;
    
    /**
     * @author shaoming
     * @Date: 2021/4/23 16:47
     * @Description:
     */
    @SpringBootTest
    public class StringUitilTest {
        /**
        几个针对性的测试的字符窜
        */
        @Test
        public void testCreateString() {
            String str1 = "";
            String str2 = "   ";
            String str3 = null;
            String str4 = " 我是string的内容 ";
        }
    
        /**
         * 测试org.springframework.util.StringUtils工具判断字符窜是否为空的api
         */
        @Test
        public void testStringNotEmptyBySpringUtils() {
            String str1 = "";
            String str2 = "   ";
            String str3 = null;
            String str4 = " 我是string的内容 ";
            boolean empty1 = StringUtils.isEmpty(str1);
            boolean empty2 = StringUtils.isEmpty(str2);
            boolean empty3 = StringUtils.isEmpty(str3);
            boolean empty4 = StringUtils.isEmpty(str4);
            System.out.println(empty1);
            System.out.println(empty2);
            System.out.println(empty3);
            System.out.println(empty4);
            /*
            控制台打印:
            true
            false
            true
            false
             */
        }
    
        /**
         * org.apache.commons.lang3.StringUtils这个工具类进行字符窜判空的工具类
         * 说明:
         * 使用这个工具类需要引入以下依赖
         * <dependency>
         * <groupId>org.apache.commons</groupId>
         * <artifactId>commons-lang3</artifactId>
         * <version>3.1</version>
         * </dependency>
         */
        @Test
        public void testStirngNotEmptyByapacheCommonsLangsStringUtils() {
            String str1 = "";
            String str2 = "   ";
            String str3 = null;
            String str4 = " 我是string的内容 ";
            System.out.println("测试isBlank方法");
            System.out.println(org.apache.commons.lang3.StringUtils.isBlank(str1));
            System.out.println(org.apache.commons.lang3.StringUtils.isBlank(str2));
            System.out.println(org.apache.commons.lang3.StringUtils.isBlank(str3));
            System.out.println(org.apache.commons.lang3.StringUtils.isBlank(str4));
            System.out.println("测试isEmpty方法");
            System.out.println(org.apache.commons.lang3.StringUtils.isEmpty(str1));
            System.out.println(org.apache.commons.lang3.StringUtils.isEmpty(str2));
            System.out.println(org.apache.commons.lang3.StringUtils.isEmpty(str3));
            System.out.println(org.apache.commons.lang3.StringUtils.isEmpty(str4));
            /*
             * 控制台打印
             * 测试isBlank方法
             * true
             * true
             * true
             * false
             * 测试isEmpty方法
             * true
             * false
             * true
             * false
             */
        }
    
        /**
         * 测试hutool的String判空工具类
         * 说明:
         * 使用StrUtil需要在mavne项目中引入hutool的依赖
         * <dependency>
         * <groupId>cn.hutool</groupId>
         * <artifactId>hutool-all</artifactId>
         * <version>5.6.3</version>
         * </dependency>
         */
        @Test
        public void testStringByHutoolofStrUtil() {
            String str1 = "";
            String str2 = "   ";
            String str3 = null;
            String str4 = " 我是string的内容 ";
            System.out.println("测试hutool中String判空的isBlank方法");
            System.out.println(StrUtil.isBlank(str1));
            System.out.println(StrUtil.isBlank(str2));
            System.out.println(StrUtil.isBlank(str3));
            System.out.println(StrUtil.isBlank(str4));
            System.out.println("测试hutool中String判空的isEmpty方法");
            System.out.println(StrUtil.isEmpty(str1));
            System.out.println(StrUtil.isEmpty(str2));
            System.out.println(StrUtil.isEmpty(str3));
            System.out.println(StrUtil.isEmpty(str4));
            /*
             * 控制台打印
             * 测试hutool中String判空的isBlank方法
             * true
             * true
             * true
             * false
             * 测试hutool中String判空的isEmpty方法
             * true
             * false
             * true
             * false
             */
        }
    
    }
    
    

    总结

    1.如果我们可以使用hutool工具类,我们可以使用hutool,因为这个开源工具库已经成熟,而且它的api比较多,而且社区很活跃

    2.StrUtil工具类名称容易区分和记住,别的框架的string工具类都交StringUtils等,很容易混淆,而且api容易记错

    3.如果是内网开发,一般项目中都会有apache的StringUtils,我们可以使用apache的StringUtils,它的api比较多

    展开全文
  • 对象、String判空

    2019-08-05 23:04:06
    判空分为两种:对象类型的判空String类型的判空 对象类型的判空 null == user StringUtil.isNullorEmpty(); StringUtil.isNotEmpty() StringUtil.isEmpty() 字符串判空 1、if(null == s || "".equals(s)); ...

    1、判空

    判空分为两种:对象类型的判空,String类型的判空

    对象类型的判空

    null == user 

    StringUtil.isNullorEmpty(); 

    StringUtil.isNotEmpty()

    StringUtil.isEmpty()

    字符串判空

    1、if(null == s || "".equals(s));

    2、if(null == s ||  s.length()<=0);  效率高

    3、if(null == s || s.isEmpty());  java1.6之后

    4、if(null == s || s == "" );效率和方法二方法三差不多

    如果没有"null == s" 若String类型的S为null,则equals()或者length() 会报错

    注:== 比较内存,equals比较值

    展开全文
  • 1、js判空: if ( $('#dictType').val()==null && $('#dictType').val()==''){} 2、List集合判空: List<ForkliftAttach> list = truckAttachMapper.queryAttachByForkliftId(id); if(list !=...
  • java String判空

    2019-02-27 11:35:26
     如果 String 类型为null, 而去进行 equals(String) 或 length() 等操作会抛出java.lang.NullPointerException.  并且s==null 的顺序必须出现在前面,不然同样会抛出java.lang.NullPointerException.  如下Java...
  • 由于在java经常会要对数值进行判空(尤其是String类型),所以提炼成工具类,在以后每一次用到可以简写很多代码,同时代码也简单明了。日常积累工具方法,能够更加精炼。
  • java String 判空

    2018-07-27 10:22:43
    pkgName != null &amp;&amp; pkgName.length() != 0
  • Java String 判空的常用方法

    万次阅读 2018-06-18 02:58:56
    java String判空方法算是java开发中的一个很基础的方法,但是自己有时候会忘记,所以写篇博客总结加深记忆。方法一:是我所知道的效率的最高的,也是最常用的方法。if(s == null || s.length() &lt;= 0)方法二...
  • java String判空方法算是java开发中的一个很基础的方法,但是自己有时候会忘记,所以写篇博客总结加深记忆。 方法一:是我所知道的效率的最高的,也是最常用的方法。 if(s == null || s.length() <= 0) 方法...
  • Java String 判空的标准用法

    千次阅读 2017-08-29 09:31:05
    if (name != null && !name.equals("")) { //do something } 或者 if (!"".equals(name)) {//将""写在前头,这样,不管name是否为null,都不会出错。 //do something }
  • String判空 首先我先对 NPE(NullPointerException) 做出一个我自己理解的说法, 当你试图用一个空对象去调用它的方法的时候就会抛出 NPE 。 现在平时开发中做的最多的就是 CRUD 操作,我们在 Dao 层返回的数据...
  •  String类型数据判空我们一般需要判断是否是 null 或者 "";  例如 String str = null; 对于str的判断我们传统方式有:str != null &amp;&amp; str != "" 或者 str != null &...
  • Flutter 关于String isNotEmpty 判空

    万次阅读 2018-11-09 16:26:48
    Dart StringString示例判空问题场景一场景二场景三总结 String Dart 里的 String是不可变对象;要检测两个 String 的内容是否一样时,我们使用 == 进行比较;如果要测试两个对象是否是同一个对象(indentity test...
  • String类型判空

    2014-08-05 10:51:00
    针对前后含有空格、有空格的、字符串、以及null字符的判断 public static void main(String[] args) { String s1 = ""; String s2 = null; String s3 = " "; String s4 = "hello"; String s5...
  • JAVA String字符串判空

    千次阅读 2018-12-24 16:47:37
    正确的写法: "".equals(str) 或 str == null || str.equals("") ...null表示这个字符串不指向任何的东西,那么没有是否为的问题,因为引用的实例对象都没有。这时候...
  • Java中的String为引用类型,我们经常遇到判空的情况,str==null判断该字符串是否为null(空引用类型对象)。 str.isEmpty(),判断该字符串是否为空字符串; str.equals(""),判断该字符串是否为空字符串。...
  • String字符串判空陷阱!!!!!

    千次阅读 2018-06-22 11:08:36
    有个判空操作,从某个List&lt;实体&gt;中拿到某个属性,然后要对它进行判空操作,因为后面要get属性,如果为空,会报空指针错误。恰巧我还有个 赋值操作,就是get得到的这个值要赋给一个变量,拿着这个变量...
  • Str == null 只能判断字符为空,不能判断长度为空 更佳全面的字符串判空是isEmpty isEmpty源码 public static boolean isEmpty(final CharSequence cs) { return cs == null || cs.length() == 0; }
  • 例如我们有一个方法叫做listsome(String…strings),那么你还可以写方法listsome(),但你不能写listsome(String[] strings),这样会出编译错误,系统提示出现重复的方法。 在使用的时候,对于listsome(String…stri
  • 使用null来判断字符串是否有值,会把字符串赋值给该对象 2.正解 使用StringUtils.isEmpty()或者isBlank来判断 public static boolean isEmpty(@Nullable Object str) { return str == null || "".equals(str); }...
  • java中判断 string 类型变量相等 判断string 类型变量是否为
  • #set($paramName = $helper.getParamName($field, $project)) #if($field.modifierStatic) ...void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.get...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,634
精华内容 13,053
关键字:

string判空