Java的split方法使用详解

 更新时间:2015年07月02日 09:06:38   投稿:hebedich  
这篇文章主要详细介绍了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[] s1 = str1.split(",");
    String[] s2 = str2.split(",");
    String[] s3 = str3.split(",");
     System.out.println("str1长度:"+s1.length);
    System.out.println("str2长度:"+s2.length);
    System.out.println("str3长度:"+s3.length);
}

执行结果:

为什么会出现这样的结果呢,查找API发现了解决方法

解决方法:  

    通过查看API我们发现我们常用的split方法默认传递的是0,现在解决str2输出空的解决方法是传递的第二个参数为负数,即可

  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[] s1 = str1.split(",");
    String[] s2 = str2.split(",",-1);
    String[] s3 = str3.split(",",-1);
    
    System.out.println("str1长度:"+s1.length);
    System.out.println("str2长度:"+s2.length);
    System.out.println("str3长度:"+s3.length);
  }

经查找API发现在String类中,存在两个split重载方法

1.public String[] split(String regex)

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

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

例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

Regex 结果

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

参数:
    regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效

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

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

此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。

limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。

例如,字符串 "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 - 如果正则表达式的语法无效

相关文章

  • MyBatis实现动态SQL更新的代码示例

    MyBatis实现动态SQL更新的代码示例

    本文博小编将带领大家学习如何利用 MyBatis 拦截器机制来优雅的实现这个需求,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-07-07
  • Spring负载均衡LoadBalancer使用详解

    Spring负载均衡LoadBalancer使用详解

    这篇文章主要介绍了Spring负载均衡LoadBalancer使用详解,Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器, 用来替代Ribbon,Spring官方提供了两种客户端都可以使用loadbalancer,需要的朋友可以参考下
    2023-11-11
  • Java正则表达式判断字符串中是否包含中文示例

    Java正则表达式判断字符串中是否包含中文示例

    之前一个朋友问我,如何判断字符串中是否包含中文,其实解决的方法很简单,但觉着有必要写出给不知道的朋友们以参考,所以下面这篇文章主要介绍了利用Java正则表达式判断字符串中是否包含中文的方法,需要的朋友可以参考。
    2017-03-03
  • 多线程下嵌套异步任务导致程序假死问题

    多线程下嵌套异步任务导致程序假死问题

    这篇文章主要介绍了多线程下嵌套异步任务导致程序假死问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • java定时调度器(Quartz)使用实例

    java定时调度器(Quartz)使用实例

    这篇文章主要介绍了java开源定时调度器使用方法
    2013-12-12
  • MapTask阶段shuffle源码分析

    MapTask阶段shuffle源码分析

    今天小编就为大家分享一篇关于MapTask阶段shuffle源码分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java网上图书商城(5)购物车模块2

    java网上图书商城(5)购物车模块2

    这篇文章主要为大家详细介绍了java网上图书商城,购物车模块第二篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • SpringBoot整合Redis使用@Cacheable和RedisTemplate

    SpringBoot整合Redis使用@Cacheable和RedisTemplate

    本文主要介绍了SpringBoot整合Redis使用@Cacheable和RedisTemplate,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • java 线程公平锁与非公平锁详解及实例代码

    java 线程公平锁与非公平锁详解及实例代码

    这篇文章主要介绍了java 线程公平锁与非公平锁详解及实例代码的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java Fluent Mybatis实战之构建项目与代码生成篇上

    Java Fluent Mybatis实战之构建项目与代码生成篇上

    Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。国内又以Mybatis用的多,基于mybatis上的增强框架,又有mybatis plus和TK mybatis等。今天我们介绍一个新的mybatis增强框架 fluent mybatis
    2021-10-10

最新评论