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- 如果正则表达式的语法无效
Java的split方法说明的更多相关文章
- Java之split()方法
Java之split()方法 1.方法介绍 (1)public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串 (2)public String[] s ...
- Java之split方法
Java之split方法 1.间隔号"." (1)str.split(".") String str = "10.156.35.87"; S ...
- java String.split方法是用注意点(转)
转自:http://www.blogjava.net/fanyingjie/archive/2010/08/05/328059.html 在java.lang包中有String.split()方法,返 ...
- Java的split()方法
在java中,split方法很常用,但是有些时候我们发现并不管用,不管用的情况:split("."),split("^"), 管用的情况:split(" ...
- [Java] String.Split 方法的6个重载函数
String.Split 方法有6个重载函数: 程序代码 1) public string[] Split(params char[] separator) 2) public string[] Sp ...
- Java 字符串Split方法的一个坑
java字符串的split,只传一个参数,后面空白的字符串会被忽略: public static void main(String[] args) { String str = "ab|c| ...
- java的split方法中的regex参数
我们需要以|进行分割,为了匹配|本身,正则中采用\|进行转义,而Java中\也表示转义,从java到正则需要必须使用\\|进行转义,即split中的\\表示正则的转义.
- 关于JAVA中split方法使用竖线异常的问题
split表达式,其实就是一个正则表达式. * ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义.不然分割的结果就不是你想要的.
- 模拟java的split函数,分割字符串,类似于java的split方法
/*自定义oracle的分割函数*//*定义一个type,用户接收返回的数据集合类型*/create or replace type splitType as table of varchar2(40 ...
随机推荐
- Android之sqlite 命令
1.数据库.表的建立,记录的添加.查询.修改和删除 F:">sqlite3 database.dbsqlite> create table admin(username text ...
- HDU-2551 竹青遍野
http://acm.hdu.edu.cn/showproblem.php?pid=2551 妙用for循环. 竹青遍野 Time Limit: 2000/1000 MS (Java/Others) ...
- devi into python 笔记(七)locals与globals 字典格式化字符串 字符集
locals()与globals(): """ locals:局部命名空间 globals:全局命名空间 都是以dictionary的形式保存的,变量名是键,变量值是值 ...
- 理解C++11正则表达式(2)
今天有幸(2016/3/19)在上海参加了C++交流会,见到了梦寐已久想见的台湾C++大神老师侯捷,心情十分的激动.侯老师对C++理解的深刻,让人叹为观止.以为他教学的严谨,说话方式娓娓道来,听着非常 ...
- uvaLA4255 Guess BFS+拓扑排序
算法指南白书 思路:“连续和转化成前缀和之差” #include <stdio.h> #include <string.h> #include <iostream> ...
- Prebrowsing
同事推荐的文章: http://www.stevesouders.com/blog/2013/11/07/prebrowsing/
- 基于url的权限管理
基于url权限管理流程 完成权限管理的数据模型创建. 1. 系统登陆 系统 登陆相当 于用户身份认证,用户成功,要在session中记录用户的身份信息. 操作流程: 用户进行登陆页面 输入用户 ...
- switch语法中break,default作用说明
转自:http://cjhbest999.iteye.com/blog/1137124 关于java中switch使用的一些说明 switch(表达式) { case 常量表达式1:语句1; .... ...
- angular js 表单验证
<!doctype html> <html ng-app="myapp"> <head> <meta charset="UTF- ...
- UVa 872 - Ordering 输出全拓扑排序
本题要求输出所有拓扑排序的序列. 还好本题的数据量不是非常大.限制在26个大写英文字母,故此能够使用递归法输出. 这个递归输出所有解在Leetcode非常多这种题目的,不小心的话,还是非常难调试的. ...