2012-02-21 3 views
0

У меня есть строка, какХотите преобразовать строку в одну форму в другую форму?

"isnull(col_name,0)<>1 or isnull(col1_name,0)=0 and isnull(col2_name,0)>=100... " 

Я хочу, чтобы преобразовать строку выше в нижеприведенной форме, как:

«(col_name is null or col_name<>1) или (col1_name is null or col1_name=0) и (col2_name is null or col2_name>=100) ...»

Я хочу, чтобы реализовать это в JAVA , Я попытался использовать функцию split, но случай не является схожим каждый раз (значит, между двумя может быть «OR» или «AND», поэтому как разделить?). Затем я попытался с функцией содержит, но как заменить эту полную часть isnull в требуемой форме. (Я также пробовал использовать массив символов, он работает несколько хорошо, но не работает где-то в соответствии с моим кодом.)

На самом деле я много пробовал разными способами, но я не могу построить хорошую логику, которая будет работать быстро.

Pls предложит мне неплохую идею. Извините за мой плохой английский.

Спасибо.

+0

Необходимо ли пространство перед выходом выходного результата? (Вы хотите, чтобы он был включен?) – Pimgd

+0

Нет, его не нужно ..... –

ответ

4

str.replaceAll("isnull\\(([^,]+),\\d+\\)([^\\d]+)(\\d+)", "($1 is null or $1$2$3)");

+0

Написал ответ, но осознанное регулярное выражение действительно было способом. Я думаю, что 0 означает «или» -, 1, вероятно, означает «и». Как изменить регулярное выражение так, чтобы оно было «и»? – Pimgd

+1

'str.replaceAll (" isnull \\ (([^,] +), 0 \\) ([^ \\ d] +) (\\ d +) "," ($ 1 равно null или $ 1 $ 2 $ 3) ") .replaceAll ("isnull \\ (([^,] +), 1 \\) ([^ \\ d] +) (\\ d +)", "($ 1 - нуль и $ 1 $ 2 $ 3)") ' если это то, что вы подразумеваете. –

+0

Спасибо Александру Павлову за быстрый ответ. Я пробовал это, но ничего не заменил. Моя исходная строка такая же, как и после применения этого регулярного выражения. Я проверяю его, отображая строку на консоли. –