该内容已被发布者删除 该内容被自由微信恢复
文章于 2021年9月5日 被检测为删除。
查看原文
被用户删除
其他

如何在 Java 中优雅地分割 String 字符串,鸭哥给你说透彻

鸭哥 鸭哥聊Java 2021-09-05

大家好,我是鸭哥。


分割字符串是 Java 编程中常用的操作,相信很多同学都知道,String 类中的 split 方法可以进行字符串分割,然而日常使用起来却仅限于 str.split( "-"),其中 "-"为分隔符。其实 split 方法的功能非常强大,可以更优雅地使用它分割字符串



使用方法


split 方法的一种声明为,

public String[] split(String regex)

其中 regex 指的是正则表达式分隔符我们平时使用单个字符作为分隔符,其实可以看作特殊的正则表达式,特殊之处在于这种表达式只匹配它自身,如 "-" 只匹配 "-", 示例如下

String string = "86-15003455666";String[] parts = string.split("-");String part1 = parts[0]; // 86String part2 = parts[1]; // 15003455666


split 方法的另一个声明为,

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

regex 指的是 正则表达式分隔符,limit 指定的则是分割的份数,举个例子就明白了

String string = "004-556-42";String[] parts = string.split("-", 2); // 限定分割两份String part1 = parts[0]; // 004String part2 = parts[1]; // 556-42

而在某些场景下,我们可能想要在结果中保留分隔符,这也是可以做到了设置分隔符与分割后左侧的结果相连,

String string = "86-15003455666";String[] parts = string.split("(?<=-)");String part1 = parts[0]; // 86-String part2 = parts[1]; // 15003455666

设置分隔符与分割后右侧的结果相连,

String string = "86-15003455666";String[] parts = string.split("(?=-)");String part1 = parts[0]; // 86String part2 = parts[1]; // -15003455666

机智的你可能已经发现了,其实分割方法的精妙之处,全在于正则表达式 regex 的设置,正则表达式还是要好好学习的!



妙用正则表达式


在实际的工作场景中,对于要分割的字符串,我们在分割之前,往往需要校验下它的格式,只有符合我们的要求,我们才对它进行拆分处理。而使用 Pattern 类加 Matcher 类,可以使字符串的格式识别和分割操作一气呵成:

public class SplitExample { //\d代表数字,+代表出现一次或多次。所以(\\d+)-(\\d+)匹配用"-"相连的两个数字串 // Pattern 对象是正则表达式的编译表示 private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");
public static void checkString(String s) { // Matcher对象对输入字符串进行解释和匹配操作 Matcher m = twopart.matcher(s); if (m.matches()) { //m.group(1) 和 m.group(2) 存储分割后的子串 System.out.println(s + " matches; first part is " + m.group(1) + ", second part is " + m.group(2) + "."); } else { System.out.println(s + " does not match."); } }
public static void main(String[] args) { checkString("123-4567"); // 匹配 checkString("s-tar"); // 字母序列,不匹配 checkString("123-"); // "-"右侧的数字串为空,不匹配 checkString("-4567"); // "-"左侧的数字串为空,不匹配 checkString("123-4567-890"); // 存在两个"-",不匹配 }}


上述程序的运行结果为:





分割字符串的方法虽然不止于此,但是最常用和优雅的两种,鸭哥已经介绍给大家了~


在本篇文章中,我们又一次见识到了正则表达式的威力,大家是否想要深入地了解正则表达式呢?用留言或点赞告诉鸭哥吧,呼声高的话,鸭哥就出一篇正则表达式的高质量总结文!


近期技术热文

1、和鸭哥一起看,Java数组声明及初始化的全貌

2、别总写代码,这130个网站比涨工资都重要

3、新版 Win10 来了!网友:要被丑哭了。。。

点个在看你最好看


: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存