String [] parts = cmower.split(Pattern.quote(“.”));
当通过调试模式进入 String.split()
方法源码的话,会发现以下细节:
return Pattern.compile(regex).split(this, limit);
String 类的 split()
方法调用了 Pattern 类的 split()
方法。也就意味着,我们拆分字符串有了新的选择,可以不使用 String 类的 split()
方法了。
public class TestPatternSplit {
/**
- 使用预编译功能,提高效率
*/
private static Pattern twopart = Pattern.compile(“\.”);
public static void main(String[] args) {
String [] parts = twopart.split(“沉默王二.一枚有趣的程序员”);
System.out.println(“第一部分:” + parts[0] +" 第二部分:" + parts[1]);
}
}
除此之外,还可以使用 Pattern 配合 Matcher 类进行字符串拆分,这样做的好处是可以对要拆分的字符串进行一些严格的限制,来看一段示例代码:
public class TestPatternMatch {
/**
- 使用预编译功能,提高效率
*/
private static Pattern twopart = Pattern.compile(“(.+)\.(.+)”);
public static void main(String[] args) {
checkString(“沉默王二.一枚有趣的程序员”);
checkString(“沉默王二.”);
checkString(“.一枚有趣的程序员”);
}
private static void checkString(String str) {
Matcher m = twopart.matcher(str);
if (m.matches()) {
System.out.println(“第一部分:” + m.group(1) + " 第二部分:" + m.group(2));
} else {
System.out.println(“不匹配”);
}
}
}
这时候,正则表达式为 (.+)\\.(.+)
,意味着可以把字符串按照英文逗点拆分成一个字符组,英文小括号 ()
的作用就在于此(可以查看我之前提供的正则表达式手册)。
由于模式是确定的,所以可以把 Pattern 表达式放在 main()
方法外面,通过 static 的预编译功能提高程序的效率。
来看一下程序的输出结果:
第一部分:沉默王二 第二部分:一枚有趣的程序员
不匹配
不匹配
不过,使用 Matcher 来匹配一些简单的字符串时相对比较沉重一些,使用 String 类的 split()
仍然是首选,因为该方法还有其他一些牛逼的功能。
比如说,你想把分隔符包裹在拆分后的字符串的第一部分,可以这样做:
String cmower = “沉默王二,一枚有趣的程序员”;
if (cmower.contains(“,”)) {
String [] parts = cmower.split(“(?<=,)”);
System.out.println(“第一部分:” + parts[0] +" 第二部分:" + parts[1]);
}
程序输出的结果如下所示:
第一部分:沉默王二, 第二部分:一枚有趣的程序员
可以看到分隔符“,”包裹在了第一部分,如果希望包裹在第二部分,可以这样做:
String [] parts = cmower.split(“(?=,)”);
可能有些小伙伴很好奇,?<=
和 ?=
是什么东东啊?它其实是正则表达式中的断言模式。
温馨提醒:如果对断言模式比较生疏的话,可以查看我之前提供的正则表达式手册。
另外,假如说字符串中包含了多个分隔符,而我们只需要 2 个的话,还可以这样做:
String cmower = “沉默王二,一枚有趣的程序员,宠爱他”;
if (cmower.contains(“,”)) {
String [] parts = cmower.split(“,”, 2);
System.out.println(“第一部分:” + parts[0] +" 第二部分:" + parts[1]);
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
我的面试宝典:一线互联网大厂Java核心面试题库
以下是我个人的一些做法,希望可以给各位提供一些帮助:
整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!
283页的Java进阶核心pdf文档
Java部分:Java基础,集合,并发,多线程,JVM,设计模式
数据结构算法:Java算法,数据结构
开源框架部分:Spring,MyBatis,MVC,netty,tomcat
分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
还有源码相关的阅读学习
数据结构
开源框架部分:Spring,MyBatis,MVC,netty,tomcat
分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
[外链图片转存中…(img-ruuGu7vK-1710414562451)]
还有源码相关的阅读学习
[外链图片转存中…(img-SawfYTcd-1710414562452)]