-
2022-04-28 23:48:36
一、split介绍
split() 方法根据匹配给定的正则表达式来拆分字符串。
注意: . 、 $、 | 和 * 等转义字符,必须得加 \\。
注意:多个分隔符,可以用 | 作为连字符。
语法
public String[] split(String regex, int limit)
参数
-
regex -- 正则表达式分隔符。
-
limit -- 分割的份数。
返回值
字符串数组。
二、测试一
如下示例,猜猜答案吧
private static void test01() { String str1="a"; String str2="a,b"; String str3="a,b,"; String str4="a,b, "; String str5=",,,,,,"; String[] split1 = str1.split(","); String[] split2 = str2.split(","); String[] split3 = str3.split(","); String[] split4 = str4.split(","); String[] split5 = str5.split(","); System.out.println("str1分割后:"+JSON.toJSONString(split1)); System.out.println("str2分割后:"+JSON.toJSONString(split2)); System.out.println("str3分割后:"+JSON.toJSONString(split3)); System.out.println("str4分割后:"+JSON.toJSONString(split4)); System.out.println("str5分割后:"+JSON.toJSONString(split5)); }
结果
str1分割后:["a"] str2分割后:["a","b"] str3分割后:["a","b"] str4分割后:["a","b"," "] str5分割后:[]
三、测试二
private static void test02() { String str1="a"; String str2="a,b"; String str3="a,b,"; String str4="a,b, "; String str5=",,,,,,"; String[] split1 = str1.split(",",2); String[] split2 = str2.split(",",2); String[] split3 = str3.split(",",2); String[] split4 = str4.split(",",2); String[] split5 = str5.split(",",2); System.out.println("str1分割后:"+JSON.toJSONString(split1)); System.out.println("str2分割后:"+JSON.toJSONString(split2)); System.out.println("str3分割后:"+JSON.toJSONString(split3)); System.out.println("str4分割后:"+JSON.toJSONString(split4)); System.out.println("str5分割后:"+JSON.toJSONString(split5)); }
结果
str1分割后:["a"] str2分割后:["a","b"] str3分割后:["a","b,"] str4分割后:["a","b, "] str5分割后:["",",,,,,"]
更多相关内容 -
-
java 字符串分割的三种方法(总结)
2020-09-01 02:52:50下面小编就为大家带来一篇java 字符串分割的三种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
java字符串分割方法
2021-11-17 22:37:51java 分割字符串split()方法 实现功能 编写一个将字符串分段的类,传入:需分段的字符串 与 字符个数(以此个数进行分段),输出:按指定字符个数进行分段后的若干字符串(汉字算单个字符)。 功能实现要求分析 ...java 分割字符串split()方法
实现功能
编写一个将字符串分段的类,传入:需分段的字符串 与 字符个数(以此个数进行分段),输出:按指定字符个数进行分段后的若干字符串(汉字算单个字符)。功能实现要求分析
- 字符串传入
- 字符串分段
- 字符串输出
实现思路
Java是一个面向对象设计类语言,自身提供了很多方法帮助我们实现想要的功能。
那么如何实现字符串传入功能?
我们需要了解一个Java类----Scanner类,这是一个用于扫描输入文本的新的实用程序。自Java 5版本添加了java.util.Scanner类,它是以前的StringTokenizer和Matcher类之间的某种结合。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。
使用Scanner类需导包 import java.util.Scanner;
上图显示了Scanner的部分使用格式,sc.next后加数据基本类型。
Scanner s = new Scanner(System.in); String n = s.next();
这是传入字符串的实现代码。
字符串分割
对字符串进行操作,自然第一个会想到String类有没有相应的方法来实现分割操作,了解过API或者对Java有了解过的首先会想到String类下的split()方法能够实现这个功能。下面来看看split()方法的使用格式。
String []a=se.split(","); String []b=se.split(",",5);
1.se.split(String sign);
2.se.split(String sign,int limit);第一种是以逗号作为标记分割,也就是sign 为自己指定的分割符,sign可以是任意字符串。
第二种是在第一种的基础上对分割的字符串数量进行限制。显而易见,split()方法有些局限,对于原来字符串的内容有要求。
如:String p = "石家庄-武汉-哈尔滨"; String []g = p.split("-"); for(String y : g) System.out.println(y);
在这段程序中,分割符为“-”,输出结果也确实达到预期,但也不难发现利用split()分割字符串需要内容带分隔符
所以我们利用这一特点,不难想到可以先对字符串按间距添加分隔符,然后再使用split()方法来实现分割功能。
理论上使用一个for循环就能实现,但是字符串是常量,一旦创建,其内容和长度是不可以改变的。所以在这里我们要用到String Buffer或者String Builder类,这两个类提供了修改功能,类似一个容器。
实现代码如下:int m=0; for(int i=0;i+m<str.length();i++){ if(i%l==0) { str.insert(i + m, ","); m++; } }
代码中l是分割的长度,m是添加分隔符后加1的标记
上图清晰地解释了m的作用,实际上就是更新了下一位分割位置,因为在添加分隔符时长度也在增加(更新)。使用split()方法
对原字符串完成分隔符插入后,新字符串已经带有分隔符并且是在预想的位置上,所以理论上我们就可以使用split()方法完成分割字符串。
代码如下:String se= str.toString(); String []a=se.split(",");
返回成字符串se,将分割后结果存储到字符串数组a[]中,方便输出
输出分割结果
代码如下:for(String j:a) System.out.println(j);
遍历a[],并输出
完整代码
import java.util.Scanner; public class Main { public static void main(String[] args) { StringBuilder str = new StringBuilder(); Scanner s = new Scanner(System.in); String n = s.next(); str.append(n); Scanner x = new Scanner(System.in); int l = x.nextInt(); int m=0; for(int i=0;i+m<str.length();i++){ if(i%l==0) { str.insert(i + m, ","); m++; } } String se= str.toString(); String []a=se.split(","); for(String j:a) System.out.println(j); } }
运行结果
结语
制作不易,觉得本文有帮助的支持一下!如有其他问题,可直接私信。 -
Java字符串分割性能比较
2018-09-21 10:21:32java字符串分割性能比较 关于字符串的分割,我用jdk的split、apache的common的split、正则表达式、StringTokenizerr以及substring做了以下比较,比较的时间为纳秒,用一个字符串“192.168.20.121”作为示例,打印...Java字符串分割性能比较
关于字符串的分割,我用jdk的split、apache的common的split、正则表达式、StringTokenizerr以及substring做了以下比较,比较的时间为纳秒,用一个字符串“192.168.20.121”作为示例,打印时间为:
- 使用jdk的split切分字符串
192 168 20 121 花费时间1086171 - 使用common的split切分字符串
192 168 20 121 花费时间9583620 - 使用StringTokenizer的切分字符串
192 168 20 121 花费时间184380 - 使用jdk的pattern切分字符串
192 168 20 121 花费时间222654 - 使用jdk的substring切分字符串
192 168 20 121 花费时间157562
虽然每次打印的时间不太相同,但是基本相差不大。通过以上分析得知使用substring和StringTokenizer的效率相对较高,其它相对较差。
为什么StringTokenizer的性能相对好些呢?
通过分析发现StringTokener.hasMoreElement和String.split(String.split是用正则表达式匹配,所以不使用KMP字符串匹配算法)用的都是按顺序遍历的算法,时间复杂度O(m*n),较高。
不过StringTokener是一边按顺序遍历,一边返回每个分组;而Spring.split是全部分组完成,再返回字符串数组。这个区别不大,但是如果我们不需要全部都分组,只需要某个分组的字符串,那么StringTokener性能会好点。
apacheJakatar的StringUtils一样用了KMP算法(按序查找字符串,时间是O(m+n)),按理说效率应该最高,但是为啥性能会比较差呢,需要进一步研究。不过有一个优点是如果使用一些转义字符
如“.”、“|”等不需要加"\",如果使用jdk的split必须加转义。
附源码:
String ip ="192.168.20.121";
long st1 = System.nanoTime(); String[] ips =ip.split("\\."); System.out.println("使用jdk的split切分字符串"); for (int i = 0; i < ips.length; i++) { System.out.print(ips[i]+" "); } System.out.println("花费时间"+(System.nanoTime()-st1)); <script src="https://localhost01.cn/js/jquery-2.0.0.min.js"></script> long st2 = System.nanoTime(); ips= StringUtils.split(ip,"\\."); System.out.println("使用common的split切分字符串"); for (int i = 0; i < ips.length; i++) { System.out.print(ips[i]+" "); } System.out.println("花费时间"+(System.nanoTime()-st2)); long st3 = System.nanoTime(); System.out.println("使用StringTokenizer的切分字符串"); StringTokenizer token=new StringTokenizer(ip,"."); while(token.hasMoreElements()){ System.out.print(token.nextToken()+" "); } System.out.println("花费时间"+(System.nanoTime()-st3)); long st4 = System.nanoTime(); Pattern pattern = Pattern.compile("\\."); ips =pattern.split(ip); System.out.println("使用jdk的pattern切分字符串"); for (int i = 0; i < ips.length; i++) { System.out.print(ips[i]+" "); } System.out.println("花费时间"+(System.nanoTime()-st4)); long st5 = System.nanoTime(); System.out.println("使用jdk的indexOf切分字符串"); int k=0,count=0; StringBuilder sb = new StringBuilder(); for (int i = 0; i < ip.length(); i++) { if(ip.substring(i, i+1).equals(".")){ if(count==0){ System.out.print(ip.substring(0, i)+" "); }else if(count==1){ System.out.print(ip.substring(k+1, i)+" "); }else{ System.out.print(ip.substring(k+1, i)+" "); System.out.print(ip.substring(i+1, ip.length())+" "); } k=i;count++; } } System.out.println("花费时间"+(System.nanoTime()-st5));
- 使用jdk的split切分字符串
-
Java字符串分割函数split中以·点分割的问题
2021-03-16 18:48:15问题描述:// 把字符串"192.168.1.1"按照小圆点进行分割,分割成"192","168","1","1"四个字符串。String preStr = "192.168.1.1";String[] string = preStr.split("."); // 错误写法。这种写法得到的字符串组长度...问题描述:
// 把字符串"192.168.1.1"按照小圆点进行分割,分割成"192","168","1","1"四个字符串。
String preStr = "192.168.1.1";
String[] string = preStr.split("."); // 错误写法。这种写法得到的字符串组长度为0
String[] string = preStr.split("\\."); //正确写法。对小圆点进行转义
出现上述情况的原因是:split函数会将参数看作是正则表达式进行处理。"."在正则表达式中表示匹配任意一个字符,经过转义之后,"."才是本身的含义,才能得到正确的分割结果。下面主要探讨上述错误写法中得到的字符串组为什么大小为0。
下面是split函数源代码(java.util.regex.Pattern.split)
public String[] split(CharSequence input, int limit) {
int index = 0;
boolean matchLimited = limit > 0; // 是否限制匹配个数
ArrayList matchList = new ArrayList(); // 匹配结果队列
Matcher m = matcher(input); // 待切割字符(串)匹配对象
// Add segments before each match found
while (m.find()) {
// 如果不限制匹配个数 或者 当前结果列表的大小小于limit-1
if (!matchLimited || matchList.size() < limit - 1) {
String match = input.subSequence(index, m.start()).toString(); // 取子串,(分隔串所在的首位)
matchList.add(match); // 添加进结果集
index = m.end(); // 获取下一个子串的首字符下标
} else if (matchList.size() == limit - 1) { // last one,即还剩最后一个名额了
// 最后一个元素从指针取到字符串结尾
String match = input.subSequence(index, input.length()).toString();
matchList.add(match);
index = m.end();
}
}
// If no match was found, return this
if (index == 0) // 即没有切分到的意思吧,返回整一串
return new String[] { input.toString() };
// 如果不限制匹配个数 或者结果集大小小于限制个数
if (!matchLimited || matchList.size() < limit)
// 最后一个元素从指针取到字符串结尾
matchList.add(input.subSequence(index, input.length()).toString()); // Construct
// result
int resultSize = matchList.size();
if (limit == 0)
// 如果结果集最后的元素是"",一个一个地删除它们
while (resultSize > 0 && matchList.get(resultSize - 1).equals(""))
resultSize--;
String[] result = new String[resultSize];
return matchList.subList(0, resultSize).toArray(result);
}
代码中注释转自https://www.cnblogs.com/xzhang/p/3995464.html
正则表达式中“.”表示匹配任意一个字符。对于split函数而言,就是就是以任意字符为分隔符进行分割,那么“192.168.1.1”按照任意字符分割等价于“ccccccccccc”按照“c”进行分割,那么分割结果肯定都是空串。split函数中最后的while循环会将分割之后的字符串组,从后往前清理空字符串,所以“.”在不转义的情况下,分割字符串得到的结果为空。
代码中,Matcher m = matcher(input)中,m记录下每个分隔符的位置。例如“abc;efg;hig”中,分隔符“;”的位置是3,7。m.start()可以获取到第一个分隔符的索引3,利用函数subSequence(int start, int end)进行分割,所以第一个子串传入参数[start = 0,end = 3],m.end()获取当前匹配到的分隔符之后的位置4;m.find()寻找下一个分隔符位置,m.start()为7,第二个字串[start = 4,end = 7];以此类推。
对于字符串“192.168.1.1”按照“.”进行分割时,分隔符的位置为0,1,2,3,4,...,10,11,每个子串是[0,0],[1,1][2,2],...,[10,10],[11,11]。对于函数subSequence(int start, int end),end==start时返回空串。所以最后得到的结果也是空串。
以上是一些简单分析,有不对的地方请大家多指教。
下面附上相关的函数说明,便于大家理解:
m.start() //Returns the start index of the previous match.
m.end() //Returns the offset after the last character matched.
m.find() //Attempts to find the next subsequence of the input sequence that matches the pattern
-
java 字符串分割
2012-10-20 22:40:40java 字符串分割 代码 输入一字符串(长度小于100),10个字符一组分割存入新的数组,倒序输出。 -
java字符串分割方法.split()的详细用法
2021-02-03 13:14:15(1)按指定普通字符分割: java代码如下: String string="123@456@789"; String array[]=string.split("@"); //以 @ 分割 for(String s:array) System.out.println(s); 运行结果: 123 ... -
Java StringUtils字符串分割转数组的实现
2020-08-25 16:46:57主要介绍了Java StringUtils字符串分割转数组的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
Java字符串分割函数split
2018-09-13 14:53:16将一个字符串分割为子字符串,然后将结果作为字符串数组返回。 基本格式 :stringObj.split([separator,[limit]]) (1)stringObj 必选项。要被分解的对象即你想要进行操作的字符串,该对象... -
Java中字符串去重的特性介绍
2020-09-03 13:44:47主要介绍了Java中字符串去重的特性,是Java8中引入的一个新特性,至于是否真的用起来顺手就见仁见智了...需要的朋友可以参考下 -
java字符串分割为数组,数组转List,List转ArrayList等操作学习
2019-09-16 17:13:22java字符串分割为数组,数组转List,List转ArrayList等操作学习java字符串分割为数组数组转List集合判断list中是否包含某元素如果List集合包含某元素,则删除该元素 java字符串分割为数组 定义字符串String str = ... -
【Java字符串分割[split()]和截取[substring()]】
2019-07-15 17:40:21最近写代码时遇到自字符串分割和截取的问题,在此总结一下。 字符串的分割: 一般自字符串的分割常用的方法是java.lang包中的String.split()方法,返回是一个字符串数组。 语法: public String[] split... -
Java字符串分割(转)
2021-03-01 06:37:02java.lang.String的split()方法, JDK 1.4 or laterpublicString[]split(Stringregex,int limit)示例代码public class StringSplit {public static void main(String[] args) {String sourceStr = "1,2,3,4,5";... -
Java中的字符串分割 .
2021-03-01 06:38:12Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项:java.lang.string.splitsplit 方法将一个字符串分割为子字符串,然后将结果作为字符串... -
java 截取字符串(判断汉字)
2020-10-30 04:40:54jsp截取中文字符串 len为字节长度 -
java字符串常用操作方法(查找、截取、分割)
2020-08-27 03:53:40今天小编就为大家分享一篇java字符串常用操作方法(查找、截取、分割),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
Java字符串分割方法split()的功能以及使用方法的详细介绍!
2019-04-29 10:48:43在Java的学习中经常会遇到按照自己的理想情况分割字符串,并根据分割后的结果进行后续操作的问题。对于这些问题就可以使用Java提供的split() 方法进而实现,下面详细的介绍它的功能以及使用方法。 一、功能 Java... -
java字符串分割
2017-06-16 08:38:08使用split()方法可以使字符串按指定的分割字符或字符串对内容进行分割,并将结果存放在字符串数组中。 1、split(String sign):该方法可根据给定的分割对字符串进行拆分。 语法:str.split(String sign)其中sign为... -
java中将字符串分割转为List
2019-12-02 15:48:46String str = "a,b,c,d"; String[] arr = str.split(","); List<String> list = Arrays.asList(str); -
Java分割字符串
2022-03-21 16:20:51java中按某个标识符分割字符串的方法如下: Scanner scanner = new Scanner(System.in); String source = scanner.next(); String[] sourceArray = source.split("/"); for (int i = 0; i < sourceArray.... -
Java字符串分割(split)
2016-12-13 14:10:39Java中分割字符串的函数是split。 public String[] split(String regex,int limit),用String regex来分割字符串,返回值是字符串数组String word = "小王,小魏,小明,小红"; String[] words = word.split(",");//... -
Java字符串分割的三种方法
2015-07-10 21:06:58Java中分解字符串 -
java字符串拆分 空字符_如何在Java中分割字符串
2020-01-20 03:36:07java字符串拆分 空字符 介绍 拆分字符串是常见的操作。 本简短的教程将展示一些完成操作的方法。 String.split() 拆分字符串的最常见方法是使用String类中的split()方法。 它根据定界符分割给定的String并... -
使用一个字符串分割另一个字符串
2018-12-25 11:07:23* 使用一个字符串分割另一个字符串 * * @param delimiter 边界上的分隔字符 * @param haystack 输入的字符串 * @param out 输出的字符串指针 * @return 分割成了多少个成员 */ int explode(char *delimiter, ... -
Java实现split字符串分割方法
2021-01-20 17:16:35实现方法 split, 能够指定分割符将字符串拆分成字符串数组 思路如下: 统计字符串中的目标分割符的个数。 创建字符串数组并将其初始化为 “”,不初始化的话字符串数组中就会是null。 依次截取字符串中分隔符符之前... -
Java如何实现字符串的分割
2021-04-13 15:52:44Java如何实现字符串的分割 前言 本章对Java如何实现字符串的分割,是基于jDK1.8版本中的String.split()方法。 本文篇幅较长,内容较为复杂涉及到许多小细节,都是我在使用时候以及查阅资料时候遇到的坑,建议反复...