首页 > 编程知识 正文

java拆分字符串,java字符串拆分成单个字符

时间:2023-05-06 14:18:49 阅读:39692 作者:3459

说到Java分割字符串,十有八九(“这有什么困难,String类的split () () ) ) ) ) ) )方法也会直接发生事情没这么简单。

来吧,搬长椅坐下。

如果当前有字符串“沉默的king to,有趣的程序员”,则必须用中文逗号“,”进行拆分。 也就是说,第一个字符串是逗号前面的“静音王二”,第二个字符串是逗号后面的“有趣的程序员”。 此外,在拆分之前,还必须检查此字符串是否包含逗号,如果不包含,则抛出异常。

公共类测试{ publicstaticvoidmain (string [ ] args ) { String cmower='沉默王二,有趣的程序员'; if(cmower.contains (',') (字符串) ) parts=cmower.split () ); System.out.println ('第一部分: ' parts[0] '第二部分: ' parts[1]; } else { thrownewillegalargumentexception ('当前字符串不包含逗号); }}这个代码看起来很严密,对吧? 程序的输出结果和预想的一样。

第一部分:沉默之王第二部分:有趣的程序员这是在字符串确定的情况下建立的,最重要的是分隔符是确定的。 否则,麻烦就来了。

大约有12种英语特殊符号。 如果直接用上面的代码分隔符(中文逗号)替换这些特殊符号,则此程序在运行时会出现以下错误:

反斜杠(((arrayindexoutofboundsexception ) )插入符号^ (同上)美元符号$ (同上)逗号。 (同上)竖线| (正常,无错误)问号? (PatternSyntaxException (星号* (同上)加号;左小括号或右小括号);同上;左大括号或右大括号) ) )看了之后,说“这不是在挖角吗?”

遇到特殊符号该怎么办? 坐上正则表达式。

正则表达式是由字符和符号组成的一组特殊文本,可用于从文本中查找满足所需格式的语句。

那又是伙伴说:“有很多正则表达式,记不住啊! ”你可能在说。 别担心,我已经为你想好了对策。

以下链接是在GitHub中学习正则表达式的在线文档。 非常详细。 遇到正则表达式时,拿出这本手册就结束了。 记不住那么多正则表达式也没关系哦。 请学习活用。

3359 github.com/CDO co/learn-regex-zh

除了这个文档之外,还有一个:

3359 github.com/CDO co/common-regex

作者收集了平时项目开发中常用的正则表达式,可以直接拿来使用,真是太棒了。

解决了心病后,用英语把分隔符换成“.”吧。

String cmower='沉默王二.有趣的程序员'; if(cmower.contains ('.' ) string ) ) parts=cmower.split ) (. ' ); System.out.println ('第一部分: ' parts[0] '第二部分: ' parts[1]; split ) )方法时,必须使用正则表达式(() .代替特殊字符的英文逗号“.”。 为什么要用两个反斜杠? 因为本身是特殊字符,所以需要转义。

也可以使用字符类[]包含英语逗号“.”。 这也是匹配方括号中任何字符的正则表达式。

cmower.split('[.] ); 也可以使用Pattern类的quote方法包装英语逗号“.”。 此方法返回用QE包装的字符串。

在这种情况下,使用String.split ()方法的示例如下:

string [ ] parts=c mower.split (pattern.quote ('.' ); 在调试模式下进入String.split ()方法的源代码时,将找到以下详细信息:

returnpattern.compile(regex ).split ) this,limit; 调用String类的split (方法是Pattern类的split )方法。 也就是说,通过拆分字符串,您不再需要使用String类的split ()方法。

publicclasstestpatternsplit {/* * *使用预编译功能简化*/privatestaticpatterntwopart=pattern.com pile ('

\."); 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]);}

split() 方法可以传递 2 个参数,第一个为分隔符,第二个为拆分的字符串个数。查看该方法源码的话,你就可以看到以下内容:

直接 substring() 到原字符串的末尾,也就是说,第二个分隔符处不再拆分。然后就 break 出循环了。来看一下程序输出的结果:

第一部分:沉默王二 第二部分:一枚有趣的程序员,宠爱他

好了,我亲爱的读者朋友,以上就是本文的全部内容了。是不是突然感觉拆分个字符串真的挺讲究的?

我是沉默王二,一枚有趣的程序员。如果觉得文章对你有点帮助,请微信搜索「 沉默王二 」第一时间阅读。

回复【666】更有我为你精心准备的 500G 高清教学视频(已分门别类)。本文 GitHub 已经收录,有大厂面试完整考点,欢迎 Star。

原创不易,莫要白票,请你为本文点赞个吧,这将是我写作更多优质文章的最强动力。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。