Java:如何在Java中使用前导数字分割字符串

时间:2018-07-26 02:30:40

标签: java regex split

我有一个字符串,例如

12abcdef
1ab2cdef
abcdef

字符串可以以数字开头或不以数字开头,但 我需要将其分为两部分,第一个数字(如果有)和第二个字符串

我需要将字符串拆分为[12,abcdef] [1,ab2cdef] [abcdef]

如何在Java中执行此操作?我应该在Java的spilit中使用哪个正则表达式?

4 个答案:

答案 0 :(得分:0)

使用带有捕获组的正则表达式和Matcher,如下所示:

String s = "12abcdef";
Pattern p = Pattern.compile("([0-9]*)([^0-9]*)");
Matcher m = p.matcher(s);
if (m.matches()){
    System.out.println("Digits = \"" + m.group(1) + "\"");
    System.out.println("Non-digits = \"" + m.group(2) + "\"");
} else 
    System.out.println("No match");

答案 1 :(得分:0)

有很多解决方法,拆分是一个很好的起点。这是一个处理您的用户案例的工作示例。

public class Main {

    public static void main(String[] args) throws IOException, InterruptedException {
        System.out.println(splitString("12abcdef"));
        System.out.println(splitString("1ab2cdef"));
        System.out.println(splitString("abcdef"));
    }

    private static String splitString(String string) {
        String[] split = string.split("[a-z]");

        return split.length >= 1 ? split[0] : "";
    }
}

这将返回数字,如果没有数字,则返回空白字符串。

答案 2 :(得分:0)

这是您使用Java regex时真正想要的:

public class SplitNumStr {
    private final static Pattern NUM_STR_PATTERN = Pattern.compile("(\\d+)(\\w+)");
    public static void main(String... args) {
        List<String> list = new ArrayList<>(Arrays.asList("12absc", "2bbds", "abc"));
        for (String s : list) {
            System.out.println(Arrays.toString(split(s)));
        }
    }

    private static String[] split(String numStr) {
        Matcher matcher = NUM_STR_PATTERN.matcher(numStr);
        if (matcher.find()) {
            return new String[] {matcher.group(1), matcher.group(2)};
        } else return new String[] { numStr };
    }
}

输出:

[12, absc]
[2, bbds]
[abc]

答案 3 :(得分:-1)

只需计算连续数字并使用String.substring

static String[] test(String s) {
    int e = 0;
    while (e < s.length() 
        && '0' <= s.charAt(e)
        && s.charAt(e) <= '9')
        e++;
    return e == 0 || e == s.length() ? 
        new String[] { s } : 
        new String[] { s.substring(0, e), s.substring(e) };
}