2013-09-20 6 views
-1

У меня есть метод, который находится в строке условия и если нет пробелов после и перед логическим оператором, это вызывает ошибку. У меня проблема, если, например, он находит слово «больше» или находит «или», он дает ошибку. Я не знаю, как это исправить. Это пример, а ниже - мой код. Спасибо всем за помощь.Java: В анализе строки, игнорировать то, что находится в родительском

условие: (da_cargue_hechos_mora_abonados) and s(da_cliente_diario_scl) and s(da_e_abonado_diario_pos) and s(da_e_abonado_diario_pre) and s(da_dim_situacion_scl) and s(da_dim_oficina_scl)

Code: 

private static Job checkSpacesInCondition(Job job) { 
String condition = null; 
condition = job.getCondition(); 

// If null, no check needed 
if (condition != null) { 
    condition = condition.toLowerCase(); 
    condition = condition.replaceAll("&&", "and"); 
    condition = condition.replaceAll("&", "and"); 

    for (String word : CONDITION_OPERATORS) { 
    Pattern logicalPattern = Pattern.compile("\\S" + word + "|" 
     + word + "\\S"); 
    Matcher logicalMatcher = logicalPattern.matcher(condition); 
    boolean foundNoSpace = logicalMatcher.find(); 
    if (foundNoSpace) { 
     job.addWarning(JobWarning.SPACES_AFTER_LOGICAL_OPERATOR); 
    } 
    } 
} 

return job; 
} 
+1

вы можете уточнить свой вопрос немного? –

+0

Вы можете использовать \\ (* \\), чтобы найти любой символ или строку, которая имеет круглые скобки вокруг это – tom

+0

Сообщите нам, какую ошибку он выбрасывает (вместе с трассировкой стека) и дает нам некоторые примеры того, где она выбрасывает эту ошибку, а также там, где она дает неверный вывод, а также то, что вы хотите для вывода (и помещаете его отдельно, а не как часть предложений). – Dukeling

ответ

1

Не использовать регулярные выражения для разбора «условие выражения», особенно если позволяют вложенности с paranthesis Регулярные выражения не работают с этим использовать регулярные выражения для разбора.. регулярные языки. Для нерегулярных языков используют реальные синтаксические анализаторы, например ANTLR.

+0

Не похоже, что OP пытается проанализировать условие. Все, что он хочет, - это грубая предварительная проверка, которая проверяет простые распространенные ошибки. – dasblinkenlight

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