Java正则表达式无法按预期工作

时间:2014-02-11 08:48:12

标签: java regex

我使用java正则表达式将我的字符串拆分为每个2个字符的子字符串。我使用以下代码。

import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HelloWorld{

    public static void main(String []args)
    {
        String str = "admins";
        String delimiters = "([a-z]{2})";

        String[] tokensVal = str.split(delimiters);

        System.out.println("Count of tokens = " + tokensVal.length);
        System.out.println(Arrays.toString(tokensVal));
    }
}

但运行以下代码会将count的值打印为零并打印一个空数组。

3 个答案:

答案 0 :(得分:8)

import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class ApachePOI{
     public static void main(String []args) {
         String str = "admins";
         String delimiters = "(?<=\\G.{2})";

         String[] tokensVal = str.split(delimiters);


         System.out.println("Count of tokens = " + tokensVal.length);
         System.out.println(Arrays.toString(tokensVal));
     }
}

输出:

Count of tokens = 3
[ad, mi, ns]

答案 1 :(得分:3)

使用正则表达式作为分隔符将尝试通过消除表达式中匹配的字符来拆分字符串。我想你希望这些字符本身是一个子字符串,所以String.split()无济于事。

试试这个:

    String str = "admins";
    Pattern pattern = Pattern.compile(".{2}");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        String match = matcher.group();
        System.out.println(match);
    }

输出:

ad
mi
ns

答案 2 :(得分:0)

如果您有兴趣,这是一个不使用Regex的解决方案:

String str = "admins";
    String splittedStr = null;
    for (int i = 0; i < str.length()-1;) {
        splittedStr = new String (new char[] {str.charAt(i),str.charAt(i+1)});
        i=i+2;
        System.out.println(splittedStr);
    }

输出:
广告
MI
ns