Java Split RegEx无法正常工作

时间:2016-05-26 20:24:28

标签: java regex split

我在java中遇到一个非常简单的任务遇到了很多困难。首先,我想将一个字符串拆分为数组,每个字母单独使用正则表达式(这很重要,因为我会在此之后将其升级为更复杂的正则表达式,但我首先需要这个简单的运行)

    Stringbase = "artetbewrewcwewfd";       
    String arr2[] = base.split("\\.");

为什么我不能这样做?

    String base = "artetbewrewcwewfd";       
    String arr2[] = base.split("\\[abcdefghijklmnopqrstuvwxyz]");

甚至不喜欢这样。

https://ideone.com/cCYVSc

https://ideone.com/DYnh3m

谢谢你的时间

1 个答案:

答案 0 :(得分:1)

请注意,第一个正则表达式中的\\.(转义点)与文字点字符匹配(并且您的字符串没有点,因此,split会返回整个字符串。)

第二个"\\[abcdefghijklmnopqrstuvwxyz]"模式匹配[abcdefghijklmnopqrstuvwxyz]序列,因为您通过转义第一个{{1}来破坏字符类构造(并且转义的[与文字[匹配,因此,结束[也被视为文字符号,而不是特殊的构造字符。)

要在字符串中每个字符之前拆分,您可以使用

]

请参阅IDEONE demo

这里,String arr2[] = "artetbew42rewcwewfd".split("(?!^)(?=.)"); System.out.println(Arrays.toString(arr2)); // => [a, r, t, e, t, b, e, w, 4, 2, r, e, w, c, w, e, w, f, d] 在字符串的最开头失败匹配(以便不返回空格作为第一个元素)并且(?!^)是一个正面的先行,在任何字符之前匹配但是换行符。

如果您想在换行前添加,请使用(?=.)标记,或在模式前添加Pattern.DOTALL