Java split 分隔空值无法得到的解决方式

应用场景

String s1="A,B,"

将s1 以逗号分隔,转换成集合 正常的转换结果如下

[A,B]

逗号后的空不再进行分隔,若想逗号后的空即转换为三个元素的集合

List<String> list = Arrays.asList(s1.split(",",-1));

只需要在跟个条件后,添加-1 即可 ,转换的结果如下

[A, B, ]

补充知识:Java Sting类关于split处理空串以及截取最大数

java的String类中有个split方法,这个是我们经常使用到的。

split一共有两个方法,

①.public String[] split(String regex,int limit)

②. public String[] split(String regex )

先说第一个,有两个参数,api上的例子:

public String[] split(String regex,int limit)

根据匹配给定的正则表达式来拆分此字符串。

此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。

数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。

limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。

如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。

例如,字符串 "boo:and:foo" 使用这些参数可生成下列结果:

Regex Limit 结果

: 2 { "boo", "and:foo" }

: 5 { "boo", "and", "foo" }

:-2 { "boo", "and", "foo" }

o 5 { "b", "", ":and:f", "", "" }

o -2 { "b", "", ":and:f", "", "" }

o 0 { "b", "", ":and:f" }

这种形式的方法调用 str.split(regex, n) 产生与以下表达式完全相同的结果:

Pattern.compile(regex).split(str, n)

参数:

regex - 定界正则表达式

limit - 结果阈值,如上所述

返回:

字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

其实上面说的已经很详细了,说到底就是比常用的多了一个limit参数。但是参数怎么用。

1.当参数为整数的时候,只需要截取前几个,需要几个截取几个,这个不用多说。

String line = "aa,bb,cc,dd,,,,";

System.out.println(line.split(",",6).length);

输出结果为6,limit参数指定几个,输出几个,最多为8个

2.当参数为零的时候,和split()一样,截图尽可能多的字符串(其实不是最多的)。

String line = "aa,bb,cc,dd,,,,";

System.out.println(line.split(",",0).length);

输出结果为4

3.当参数为负的时候,即使后面有空的串,也会输出到最大

String line = "aa,bb,cc,dd,,,,";

System.out.println(line.split(",",-1).length);

输出结果为8

可能大家都看出来了,以逗号切割的一般都是CSV格式的文件,当遇到读取每一行记录的时候,不加参数,就会遇到这种情况,读取不完整,然后CSV数据格式验证的时候,验证数据不合法。

String line = "aa,bb,cc,dd,,,,";
String mi[] = (line).split(sp);
if (mi.length != 8)return; 

实际结果 mi.length = 4,所以通不过验证直接非法数据

②其实就是当limit参数为0的时候获得的结果,将api的介绍放上来,就不多说了。

public String[] split(String regex)

根据给定的正则表达式的匹配来拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 产生带有下面这些表达式的结果:

Regex 结果

: { "boo", "and", "foo" }

o { "b", "", ":and:f" }

参数:

regex - 定界正则表达式

返回:

字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组。

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

以上这篇Java split 分隔空值无法得到的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java split()使用方法解析

    这篇文章主要介绍了java split()使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天写个程序用到java里面的split()函数时,发现可以有两个参数,之前用这个函数一直是用的一个参数,今天试了下两个参数的使用,记录一下区别. 下面是菜鸟里关于split()函数的定义 通过这个定义可以发现,第一个参数是split()函数对字符串分割的根据,第二个参数是分割的份数. 第二个参数有两种写法 一种是比较直观的,直接输入要分割的份

  • Java的split方法使用详解

    相信大家都经常使用String 的split方法,但是大家有没有遇到下面的这种情况: 大家想想下面的代码执行结果是什么 public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[]

  • Java:String.split()特殊字符处理操作

    一:需要特殊处理才能使用split()方法的字符 (1)需要使用"\\"或"[ ]"才能正确使用的字符集: ( ) [ ] { \ ? * + . ^ $ | (2)栗子: String str = "a0^33$\\53\6|!?3#6&5/*6~9 MY{.3+-/}*(]6[>=<-(8"; //这里以"("为例 String str_sub1 = str.split("\\(")

  • Java split 分隔空值无法得到的解决方式

    应用场景 String s1="A,B," 将s1 以逗号分隔,转换成集合 正常的转换结果如下 [A,B] 逗号后的空不再进行分隔,若想逗号后的空即转换为三个元素的集合 List<String> list = Arrays.asList(s1.split(",",-1)); 只需要在跟个条件后,添加-1 即可 ,转换的结果如下 [A, B, ] 补充知识:Java Sting类关于split处理空串以及截取最大数 java的String类中有个split

  • 基于java时区转换夏令时的问题及解决方法

    一.准备知识 1.America/New_York的夏令时时间如下: 包左不包右 2016-3-13, 02:00:00到2016-11-6, 02:00:00 2017-3-12, 02:00:00到2017-11-5, 02:00:00 2.三字母时区 ID 为了与 JDK 1.1.x 兼容,一些三字母时区 ID(比如 "PST"."CTT"."AST")也受支持. 但是,它们的使用被废弃,这是因为相同的缩写经常用于多个时区 例如 CST:有

  • java Split 实现去除一个空格和多个空格

    用Split函数可以去除输入一个字符串中的空格,并且一般都是将它存储在一个字符串数组之中 例如: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String s=in.nextLine(); //如果我输入:0 1 2 3 4 String[] str=s.split(" "); Sys

  • Java使用Arrays.asList报UnsupportedOperationException的解决

    项目场景: 查询多个名销售的销售业绩,上层要求要在查询销售的业绩同事也要查看到每年的年度销售冠军,于是前端传递的是以","分割开的字符串.测试的时候就报错java.lang.UnsupportedOperationException的异常 代码展示: // 这里隐藏了查询条件,所以就写死了 List<String> performId=new ArrayList<>(); performId.add("701728881476112384")

  • java.util.NoSuchElementException原因及两种解决方法

    java输入流报错: Exception in thread "main" java.util.NoSuchElementException    at java.base/java.util.Scanner.throwFor(Unknown Source)    at java.base/java.util.Scanner.next(Unknown Source)    at java.base/java.util.Scanner.nextInt(Unknown Source)  

  • java split用法详解及实例代码

    public String[] split(String regex) 默认limit为0 public String[] split(String regex, int limit) 当limit>0时,则应用n-1次 public static void main(String[] args) { String s = "boo:and:foo"; String[] str = s.split(":",2); System.out.print(str[0]

  • Java enum关键字不识别的快速解决办法

    从别人那儿拷贝过来的myeclipse java工程,打开一看标红了一大片,仔细一看,原来是不识别enum关键字,这就有点尴尬了. 我自己重新建了一个java工程,测试了下,假如我在新建工程的时候选择JavaSE-1.6: 是识别enum关键字的,但是假如我选择第二个或者默认的jdk1.8,那就不行了,后来发现java compiler compliance level中的最高上限也才1.7,所以,两种解决方法(原理是一样的),一是将compiler compliance level设置到1.5

  • Java String转换时为null的解决方法

    开发中经常遇到从集合类List.Map中取出数据转换为String的问题,这里如果处理不好,经常会遇到空指针异常java.lang.NullPointerException,在此总结一下常用转换为String的方法,以及转换后如何对其进行判null使用的问题. Java中对象转换为String的常用方法: 方法一:String  objStr  =  (String) obj: 强制类型转换,对象obj为null,结果也为null,但是obj必须保证其本质是String类型的值,即可转换的值.

  • java使用sigar 遇到问题的快速解决方法

    先给大家介绍一个开源工具Sigar 官网:http://sigar.hyperic.com/ API: http://www.hyperic.com/support/docs/sigar/index-all.html(由于是英文的,英文不好的可以用谷歌浏览器的翻译功能,直接转换为简体中文进行阅读) Sigar(System Information Gatherer And Reporter),是一个开源的工具,提供了跨平台的系统信息收集的API,由C语言实现的.可以收集的信息包括: 1 CPU信

  • Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

    废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input) { boolean success=false; FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp

随机推荐