在java中,如何将char类表达式转换为char数组

时间:2015-02-16 10:18:28

标签: arrays regex class char expression

给定一个char类表达式,比如" [AZ] [0-9]",是否有一个解析器可以接受这个表达式并返回一个包含该范围内所有字符的char数组?

像:

char[] result = RequiredServiceClass.parse ("[A-Z][0-9]abc");

所以结果将包含

{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','a','b','c'}

1 个答案:

答案 0 :(得分:1)

您的正则表达式不是单个字符类表达式,它匹配A-Z中的一个字符,后跟0-9中的一个字符,后跟字符串文字abc

没有提到它的预期用途,但除非你使用它来编写正则表达式测试器或类似的,它似乎有点向后使用正则表达式。

但是如果你真的想要在匹配单个正则表达式字符类的字符集中获取字符子集,你可以使用以下内容:

public static char[] matchesInCharset(String regexCharClass, String charset) {
    // Append + to speed things up by matching consecutive ranges such as A-Z.
    Matcher m = Pattern.compile(regexCharClass + "+").matcher(charset);
    StringBuilder sb = new StringBuilder();

    while (m.find())
        sb.append(m.group(0));

    char[] result = new char[sb.length()];
    sb.getChars(0, sb.length(), result, 0);
    return result;
}

ascii chars 0-255的示例用法:

public static void main(String[] args) throws Exception {
    // Make charset of all ascii characters.
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 256; i++) 
        sb.append((char)i); 

    String charset = sb.toString();
    char[] result = matchesInCharset("[A-Z0-9abc]", charset);

    System.out.println(Arrays.toString(result));
}

<强>输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c]

注意:如果charset是静态的,您显然可以将其包含在matchesInCharset中,只需确保每次使用该方法时都不会生成它。