java中优雅的切割字符串

2021-06-04 06:04

阅读:389

标签:自身   代码示例   表数   切割   class   分割   pattern   特殊   private   

切割字符串

分隔字符串是java中常用的操作,String的split方法可以进行字符串切割操作,然而日常使用却仅仅限于str.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 string = "86-15003455666";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 86-
String part2 = parts[1]; // 15003455666

所以说要妙用正则表达式,代码示例:

//\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");    // 存在两个"-",不匹配
    }

运行结果:

123-4567 matches; first part is 123, second part is 4567.
s-tar does not match.
123- does not match.
-4567 does not match.
123-4567-890 does not match.

java中优雅的切割字符串

标签:自身   代码示例   表数   切割   class   分割   pattern   特殊   private   

原文地址:https://www.cnblogs.com/qudehu/p/14661715.html


评论


亲,登录后才可以留言!