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

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

大家好,我是鸭哥。


分割字符串是 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]; // 86
String 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]; // 004
String 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]; // 86
String 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");    // 存在两个"-",不匹配
    }
}


上述程序的运行结果为:


image.png


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


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



相关文章
|
19天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
29 0
java基础(13)String类
|
1天前
|
IDE Java 开发工具
Java“未封闭的 String 表达式”怎么解决
要解决Java中的“未封闭的 String 表示”问题,需检查并修正字符串字面量,确保每个字符串被正确地用双引号括起来。若字符串跨越多行,可使用字符串连接操作符(+)或引入文本块(JDK 13 及以上版本)。这能帮助避免语法错误,并使代码更整洁易读。
|
29天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
9天前
|
存储 JavaScript 前端开发
JavaScript 字符串(String) 对象
JavaScript 字符串(String) 对象
22 3
|
29天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
27 1
Java——String类详解
|
14天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
29 3
|
14天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
11 2
|
13天前
|
索引
Sass String(字符串) 函数
Sass String(字符串) 函数用于处理字符串并获取相关信息。
24 1
|
17天前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
14 2
|
25天前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。

热门文章

最新文章