Растерный рисунок для сопоставления и извлечения переменных из математической/алгебраической экспрессииJAVA

Программисты JAVA общаются здесь
Anonymous
Растерный рисунок для сопоставления и извлечения переменных из математической/алгебраической экспрессии

Сообщение Anonymous »

Я пытаюсь написать рефлексию/метод, который извлекает переменные из входной строки, которая представляет «математическое/алгебраическое выражение», и специальный шаблон, который выглядит как «свойство (AnyotherAplhanumeric)», которая также может быть переменной.

my defination arabive:

​​ ​​ ​​ ​​

. Альфаноковые значения только < /p>

2) должны быть как минимум 1 char или более < /p>

3) не могут начинаться с цифры, должны начинаться с [a-za-z] < /p>

4), например, «x», может быть окружена этой строкой (x). «Свойство (x)» < /p>

my -текущий метод и regex (в некоторых случаях работает только): < /strong> < /p>

public Set extractUniqueVarsFromExpression(String expression) {
Set varsSet = null;
Pattern p = null;
Matcher m = null;
System.out.println(expression);
if (expression != null) {
varsSet = new java.util.LinkedHashSet();
//"[A-Za-zPROPERTY(?)_][A-Za-z0-9PROPERTY(?)_]*||[A-Za-z_][A-Za-z0-9_]*"
//"[[A-Za-z_][A-Za-z0-9_]*"
p = Pattern.compile("[A-Za-zPROPERTY(?)_][A-Za-z0-9PROPERTY(?)_]*||[A-Za-z_][A-Za-z0-9_]*",
Pattern.CASE_INSENSITIVE);
m = p.matcher(expression);
while (m.find()) {

String group = m.group().trim();
//do not add duplicates

if (!varsSet.contains(group))
{
varsSet.add(group);

System.out.println(" Variable : " + group);
}//end if not duplicate

}// end while

}
System.out.println();
return varsSet;
}
< /code>

Примеры /случаи: < /strong> < /p>

ex #1: < /strong> < /p>

Вход: [(ibdweew /ibdheight) * ibdHeight] * 703 < /p>


< /p>

Переменная: свойство (ibdween) < /p>

Переменная: свойство (ibdheight) < /p>

ex #2: < /strong> < /p>

ibdight /ibelight /ibelight /ibelight * 703 < /p>

Вывод: < /p>

Переменная: ibdween < /p>

Переменная: ibdheight < /p>

ex #3: < /plound> < /p>

ex #3: < /plound> < /p>

ex #3: < /prosge> < /p>

ex #3: < /prolge> < /p>

. [Property (ibdheight) * Property (ibdheight)] * 703 < /p>

Вывод: < /p>

Переменная: свойство (ibdweew) < /p>

variable: property (ibdhewight) < /p>
variable: property (ibdhewight) < /br />
exthewight) < /br />
variable: extheight) #:4


These are the cases that don’t work (examples 4 to 6):

The problem is the parenthesis are being picked up as variables:

Input: ( Mass * ( Acceleration + whatever ))

output: < /p>

переменная: (< /p>

Переменная: масса < /p>

Переменная: ускорение < /p>

varia />
ex #: 5 < /strong> < /p>

Проблема состоит в том, что скобки поднимаются как переменные: < /strong> < /p>

Вход: (базовая высота * высота) /2 < /p>

< /p>







(< /p>

variable: base < /p>

переменная: высота < /p>

variable :) < /p>

x #: 6 < /pronge> < /p>

. OR attached to a variable:


Input: [((( var * var2 ) var3 ) + ( var1 / var4 ) var5) / var6 ]

Output:

Variable : (((

Variable : var

Variable : var2

Variable : )

Variable : var3

Variable : (

Variable : var1

Variable : var4 < /p>

переменная: var5) < /p>

переменная: var6 < /p>

Подробнее здесь: https://stackoverflow.com/questions/112 ... expression

Вернуться в «JAVA»