Java 使用此正则表达式拆分字符串:[\\dc]+

Java 使用此正则表达式拆分字符串:[\\dc]+,java,regex,string,Java,Regex,String,这是一个相对简单的带有拆分的java问题 public class Main { public static void main(String[] args) { String[] tokens = "aa33aaca^aa".split("[\\dc]+"); for (int i = 0; i < tokens.length; i++) System.out.println(tokens[i]); } } [\\dc]

这是一个相对简单的带有拆分的java问题

public class Main {
    public static void main(String[] args) {
        String[] tokens = "aa33aaca^aa".split("[\\dc]+");
        for (int i = 0; i < tokens.length; i++)
            System.out.println(tokens[i]);  }
}
[\\dc]+是如何工作的

这将通过至少重复一次的数字和字符“c”的任意组合来分割测试:

\\d-任意数字[0-9] c-字符“c” []+-此集合中的字符至少可以出现一次 因此,您的字符串将按如下方式拆分:

   1     2
aa[33]aa[c]a^aa
拆分分隔符:

数字相关2次

字符c

这将通过至少重复一次的数字和字符“c”的任意组合来分割测试:

\\d-任意数字[0-9] c-字符“c” []+-此集合中的字符至少可以出现一次 因此,您的字符串将按如下方式拆分:

   1     2
aa[33]aa[c]a^aa
拆分分隔符:

数字相关2次

字符c


除了上面的优秀答案外,请注意,如果您在在线正则表达式测试器中测试[\\dc]+,如或其他,此正则表达式将与aa33aaca^aa中的33不匹配。他们会说:\d映射到任何数字字符0-9


原因是在String.split中,我们将String作为参数,因此我们需要额外的\来形成转义序列以使\d生效

除了上面的优秀答案外,请注意,如果您在在线正则表达式测试器中测试[\\dc]+,如或其他,此正则表达式将与aa33aaca^aa中的33不匹配。他们会说:\d映射到任何数字字符0-9


原因是在String.split中,我们将String作为参数,因此我们需要额外的\来形成转义序列以使\d生效

我知道输出的第三行是如何被分割的,这是由于c,但是我和另一部分混淆了:什么是不清楚的?它完全按照你的要求去做,如果那不是你所期望的,那么请描述你真正想要发生的事情。并考虑在java文档上查询它的ReGEXP,将用一个数字或C字符分隔符来拆分。所以它匹配33和c。这就是为什么你会收到3个结果:aa,aa,a^aa。我知道输出的第三行是如何被分割的,因为c,但我和另一部分混淆了:什么是不清楚的?它完全按照你的要求去做,如果那不是你所期望的,那么请描述你真正想要发生的事情。并考虑在java文档上查询它的ReGEXP,将用一个数字或C字符分隔符来拆分。所以它匹配33和c。这就是为什么您会收到3个结果:aa,aa,a^aa。那么这是否意味着表达式\\d将任何数字拆分为一个字符串?哇,显然是的,非常感谢!!!那么这是否意味着表达式\\d将任何数字拆分为字符串?哇,显然是的,非常感谢!!!