2012-05-23 2 views
-1

У меня есть строка, что мне нужно сделать пользовательский синтаксический анализатор, но я застрял в фигурных скобках, которые, как я могу разобрать это ....проблема с разбором

[TPIN{PrimaryPIN=6152987; IsValidUser=true; }, TPIN{PrimaryPIN=794032; IsValidUser=true; }] 

здесь два поля:

  1. PrimaryPIN
  2. IsValidUser

я получил идею, чтобы получить его в массив с расколом, но это не очень хорошая идея, так что вы можете сказать мне, как я могу сделать два в rray, который может дать мне значение PrimaryPIN и IsValidUser, пожалуйста, помогите мне в этом. ....

ответ

3

Вот простой синтаксический анализатор для PrimaryPin и IsValidUser:

String s = "[TPIN{PrimaryPIN=6152987; IsValidUser=true; }, TPIN{PrimaryPIN=794032; IsValidUser=true; }]"; 
    Pattern pinPattern = Pattern.compile("PrimaryPIN=([0-9]*);"); 
    Pattern vuPattern = Pattern.compile("IsValidUser=([^;]*);"); 
    ArrayList<String> pins = new ArrayList<String>(); 
    ArrayList<Boolean> validUser = new ArrayList<Boolean>(); 
    Matcher m = pinPattern.matcher(s); 
    while (m.find()) { 
     pins.add(m.group(1)); 
    } 
    m = vuPattern.matcher(s); 
    while (m.find()) { 
     validUser.add("true".equals(m.group(1))?true:false); 
    } 
+0

и что о 'IsValidUser' –

+0

@ user1381267 заменить PrimaryPIN = ([0-9] *) с IsValidUser = (true | false) – tibtof

+0

Можете ли вы дать мне реальное решение, которое применяется как в целом приложении, потому что это говорит об одной строке и данных simepl в будущем i t будет увеличиваться больше, и данные будут сложными, так что вы можете дать некоторое решение, которое может показаться парсером –

0

Другое решение на основе @ решения Paweł Nadolski, но с одной итерации:

String s = "[TPIN{PrimaryPIN=6152987; IsValidUser=true; }, TPIN{PrimaryPIN=794032; IsValidUser=true; }]"; 
    Pattern pinPattern = Pattern.compile("PrimaryPIN=([0-9]*); IsValidUser=(true|false);"); 
    Map<String, Boolean> pins = new HashMap<String, Boolean>(); 
    Matcher m = pinPattern.matcher(s); 
    while (m.find()) { 
     pins.put(m.group(1), new Boolean(m.group(2))); 
    } 
Смежные вопросы