如何在 Java 中优雅地分割 String 字符串

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

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

[[393207]]

使用方法

split 方法的一种声明为,

public String[] split(String regex) 
  • 1.

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

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

split 方法的另一个声明为:

public String[] split(String regex, int limit) 
  • 1.

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

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

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

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

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

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

机智的你可能已经发现了,其实分割方法的精妙之处,全在于正则表达式 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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

上述程序的运行结果为:

责任编辑:赵宁宁 来源: 鸭哥聊Java
相关推荐

2022-12-06 08:27:50

Bash脚本字符串

2021-05-31 07:57:00

拼接字符串Java

2017-12-11 13:50:17

LinuxBash子字符串

2021-03-08 08:23:24

Java字符串截取

2021-11-07 07:51:01

JavaString字符串

2020-03-27 15:10:23

SpringJava框架

2022-12-15 16:23:32

JavaScrip字符串开发

2023-10-27 07:03:22

字符串String类型

2020-09-25 11:30:20

Java判空代码

2020-04-10 10:22:12

Java判空编程语言

2024-12-05 10:29:13

Rust字符串类型

2023-12-15 09:49:54

回溯解决组合问题数组

2009-08-07 14:15:21

C#字符串分割

2010-11-26 10:43:48

MySQL分割字符串

2023-10-20 15:58:27

Python删除指定字符

2022-04-01 12:51:44

命令Containerd

2023-05-12 14:14:00

Java线程中断

2020-08-25 08:56:55

Pythonawk字符串

2025-03-28 08:34:34

2010-11-26 13:27:41

MySQL存储过程
点赞
收藏

51CTO技术栈公众号