2015-02-16 4 views
0

Учитывая выражения класса char, такие как «[AZ] [0-9]», есть ли синтаксический анализатор, который может принимать это выражение и возвращать массив символов, который содержит все символы в диапазоне?В java, как преобразовать выражения класса char в массив 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'} 
+0

Это не проблема с регулярным выражением, и ваш ввод также неверен, поскольку 'abc' не является классом символов – anubhava

+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 символов 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] 

Примечание: Если кодировка является статической, вы можете, очевидно, включить ее в matchesInCharset, просто убедитесь, что вы не генерируете ее каждый раз, когда используете этот метод.

Смежные вопросы