Вообще говоря, если это только те переменные и просто добавив, вы можете просто избавиться от всего пробела и включить символы.
int a, b, c; Pattern integer = Pattern.compile("-?\\d+"); //fields
главная:
String input = ... ;
String statements = input.replaceAll("\\s+",""); //remove the white space
int next_statement_start, current_stmnt_start = 0;
while (! statements.isEmpty()) {
//^ while we have more statements to process
next_statement_start = statements.indexOf(';') + 1;
String statement = statments.substr(current_stmnt_start, next_statement_start);
processStatement(statement);
current_stmnt_start = next_statement_start;
next_statement_start = statements.indexOf(';', next_statement_start) + 1
}
processStatement:
String[] parts = stmnt.split("=");
if (parts.length != 2) throw new IllegalArgumentException(...);
int val = evaluateExpression(parts[1].substr(0, parts[1].length()-1)); //remove the ';'
setVar(parts[0], val);
SetVar:
switch (var) {
case "a": a = val; break;
case "b": b = val; break;
...
default:
throw new IllegalArgumentException(...);
}
Getvar:
switch (var) {
case "a": return a;
case "b": return b;
...
default:
throw new IllegalArgumentException (...)
}
evaluateExpression:
if (expr.isEmpty()) throw new ...;
int sum = 0; Matcher m = integer.matcher("");
for (String part : expr.split("+")) {
if (m.reset(part).matches()) {
sum += Integer.parseInt(part);
} else {
sum += getVar(part);
}
}
return sum;
Я даже не пытался скомпилировать код выше, но это идея. Вы также можете использовать reflection, который, хотя и мощный, обычно не подходит.
Или это то, что вы хотели? https://en.wikipedia.org/wiki/Recursive_descent_parser
Или это то, что вам действительно нужно? https://docs.oracle.com/javase/tutorial/essential/environment/properties.html