首页 > 编程语言 >记录个Java/Groovy的小问题:空字符串调用split函数返回非空数组

记录个Java/Groovy的小问题:空字符串调用split函数返回非空数组

时间:2024-11-19 11:09:25浏览次数:1  
标签:Groovy 非空 Java addJars split 数组 字符串 output def

问题复现

最近写了一个groovy替换程序增量流水线脚本(会Java也能看懂),示意脚本如下:

//获取文件列表方法
def listFiles(folder) {
    def output = sh(script: "ls ${folder}", returnStdout: true).trim()
    return output.split('\n') as List
}
//调用以上方法获取lib目录下的需添加的jar列表
def addJars = listFiles("lib")
println "addJars值为"+addJars 
//List判空
if(addJars != null && !addJars.isEmpty()){
  println "addJars列表长度="+addJars.size()
  for(addJar in addJars){
    println "addJar="+addJar
  }
}

最终输出结果:

addJars值为[]
addJars列表长度=1
addJar=

哎?我的判空没生效么?!

分析

ls 目录返回的字符串一般是\n文件1\n文件2\n这种格式的字符串,用\n分隔应该是没问题的。

继续分析output.split('\n') as List 这行,经过测试可以发现个现象:当output字符串为空字符串""时,这个split方法转换的数组/列表是带有一个空字符串元素的!

可简化此处代码进行测试:

这个split方法是groovy继承java的String类型的方法,用Java写代码也有这个问题:

所以说,split方法当字符串为空字符串时会返回带有空字符串元素的数组!

解决

  • 方案1:split后判断数组长度为1,且首个元素为空字符串时,返回一个空数组/列表。
  • 方案2:split返回的数组去除空字符串元素。

我的解法采用了方案2,同时用上了groovy的运算符重载:

def listFiles(folder) {
    def output = sh(script: "ls ${folder}", returnStdout: true).trim()
    def list = output.split('\n') as List
    return list - ''
}

标签:Groovy,非空,Java,addJars,split,数组,字符串,output,def
From: https://www.cnblogs.com/hellxz/p/18554463

相关文章

  • JAVA反序列化学习-CommonsCollections3(基于ysoserial)
    环境准备JDK1.7(7u80)、commons-collections(3.x4.x均可这里使用3.2版本)JDK:https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-windows-x64.exe<dependency><groupId>commons-collections</groupId><artifactId>commons-collections</a......
  • 《探索 Java 代码的魅力》
    在编程的世界里,Java无疑是一颗璀璨的明星。它以其强大的功能、跨平台性和广泛的应用场景,成为了众多开发者的首选语言。一、Java的历史与发展Java诞生于1995年,由SunMicrosystems公司推出。它的设计初衷是为了开发一种可以在各种不同的设备上运行的编程语言,以实现“......
  • 《深入理解 Java 类》
    在Java编程中,类(Class)是构建程序的基本单元。它封装了数据和操作这些数据的方法,为代码的组织和复用提供了强大的机制。一、Java类的定义一个Java类通常由以下几个部分组成:类声明:使用关键字“class”来声明一个类,后面跟着类名。例如:classMyClass{}。成员变量:也称......
  • Java 框架:强大的开发利器
    在当今的软件开发领域,Java一直以其强大的性能、跨平台性和丰富的生态系统而备受青睐。而Java框架更是在开发过程中发挥着至关重要的作用,它们为开发者提供了高效、可维护和可扩展的开发方式。一、什么是Java框架?Java框架是一种预先编写好的代码库和工具集合,旨在帮助......
  • JAVA 继承:代码复用与功能扩展的强大机制
    在Java编程中,继承是一种非常重要的概念,它为代码复用和功能扩展提供了强大的机制。本文将深入探讨Java继承的概念、用法以及其带来的好处。一、什么是Java继承?继承是面向对象编程中的一个重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以扩展父类的......
  • java_1
    目录学习内容:一:变量,数据类型,运算符1.变量 2.数据类型数据类型详解:3.常量 4.运算符算数运算符:关系运算符: 位运算符:逻辑运算符:  赋值运算符: 5.Java运算符优先级: 6.Scanner的用法学习内容:一:变量,数据类型,运算符1.变量变量:变量可以变化,是放在内存中运行......
  • java日志常用配置
    <!--pom.xml--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dep......
  • JAVA WEB 实现文件夹上传(保留目录结构)分享
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • Java运行环境的安装与配置 idea的安装
    安装Java的运行环境后,对于开发人员来说,只需要编写一次Java源码,就可以在任何支持Java的平台上运行,就不需要关心平台的差异和编译问题,从而大大的提高了开发效率。、一配置Java开发环境步骤1.下载JDKhttps://www.oracle.com/java/technologies/downloads/在官方网站......
  • javax.xml.ws.EndPoint报错
    可能的原因,检查下jdk版本,在jdk8>以上版本中,已经弃用该对象。 先安装jdk21,然后再安装jdk1.8,项目中有用到该对象,提示无法正常加载。(前提确保所有jar都正常引入)排查步骤,看下idea开发工具中jdk的配置版本, javax.xml.ws.EndPoint在jdk1.8版本中存在,高版本中不存在。......