Java拆分未按预期工作

Java拆分未按预期工作,java,regex,split,matcher,Java,Regex,Split,Matcher,我试图使用一个简单的拆分来拆分以下字符串:00-00000 我的表达式是:^([0-9][0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9]) 我的用法是: String s = "00-00000"; String pattern = "^([0-9][0-9])(-)([0-9])([0-9])([0-9])([0-9])([0-9])"; String[] parts = s.split(pattern); 如果我使用Pattern和Matc

我试图使用一个简单的拆分来拆分以下字符串:00-00000

我的表达式是:
^([0-9][0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])

我的用法是:

String s = "00-00000";

String pattern = "^([0-9][0-9])(-)([0-9])([0-9])([0-9])([0-9])([0-9])";

String[] parts = s.split(pattern);

如果我使用Pattern和Matcher类,我可以看到我的模式确实匹配,Matcher告诉我我的groupCount是7,这是正确的。但是当我尝试拆分它们时,我没有运气。

String.split不会使用捕获组作为其结果。它查找任何匹配项并将其用作分隔符。因此,结果字符串[]是正则表达式匹配的子字符串。由于正则表达式与整个字符串匹配,并且以整个字符串作为分隔符,因此它将返回一个空数组


如果要使用,则必须使用String.split()。

对于您的示例,您可以简单地执行以下操作:

String s = "00-00000";

String pattern = "-";

String[] parts = s.split(pattern);

我不能确定,但我认为您要做的是将每个匹配的组放入一个数组中

    Matcher matcher = Pattern.compile(pattern).matcher();

    if (matcher.matches()) {
        String s[] = new String[matcher.groupCount()) {
           for (int i=0;i<matches.groupCount();i++) {
               s[i] = matcher.group(i);
            }
         }
    }
Matcher-Matcher=Pattern.compile(Pattern.Matcher();
if(matcher.matches()){
字符串s[]=新字符串[matcher.groupCount()){

对于(int i=0;i来自文档:

-->返回:通过围绕给定正则表达式的匹配项拆分此字符串计算的字符串数组

基本上,正则表达式用于定义输入字符串中的分隔符。您可以在模式中使用捕获组和反向引用(例如,对于lookarounds),但最终重要的是模式匹配的内容和位置,因为这定义了进入返回数组的内容

如果要使用正则表达式将原始字符串拆分为7个部分,则可以执行以下操作:

    String s = "12-3456";
    String[] parts = s.split("(?!^)");

    System.out.println(parts.length); // prints "7"

    for (String part : parts) {
        System.out.println("Part [" + part + "]");
    } // prints "[1] [2] [-] [3] [4] [5] [6] "
这将在零长度匹配断言
(?!^)
上拆分,该断言位于字符串中第一个字符之前的任何位置。这将防止空字符串成为数组中的第一个元素,并且尾部空字符串已被丢弃,因为我们使用了默认的
限制
参数
拆分

但是,使用正则表达式获取这样的字符串的单个字符是一种过分的做法。如果只有几个字符,那么最简洁的选择是在
tocharray()上使用
foreach

如果字符串较长,则这不是最有效的选项


-
这也可能是您正在寻找的:

    String s = "12-3456";
    String[] parts = s.split("-");

    System.out.println(parts.length); // prints "2"

    for (String part : parts) {
        System.out.print("[" + part + "] ");
    } // prints "[12] [3456] "

您希望输出结果是什么?在什么时候进行分割?您是否找到了以下任何答案作为解决方案?如果是,请接受能够激励其他人回答您未来问题的答案。您尚未接受任何问题的单一答案。这与我需要的答案非常接近。谢谢!
    String s = "12-3456";
    String[] parts = s.split("-");

    System.out.println(parts.length); // prints "2"

    for (String part : parts) {
        System.out.print("[" + part + "] ");
    } // prints "[12] [3456] "