Вы не можете напрямую оценить String как математическое выражение в Java (это скомпилированный язык).Для этого вам придется написать собственный синтаксический анализатор, который на самом деле довольно трудоемкий, и это уже делали другие люди.
Так что другой подход заключается в вызове интерпретируемого языка из Java,например, используя JavaScript через ScriptEngine
.Итак, что вы можете сделать, это позволить пользователю ввести формулу в некотором текстовом поле, извлечь текст и оценить его, поместив десятичное значение символа в формулу, которое вернет вам десятичное значение зашифрованного символа.
Пример ( не проверено проверено):
// The formula wich encrypts characters, e.g. "2*n+1".
String expression = textfieldFormula.getText();
ScriptEngine interpreter = new ScriptEngineManager().getEngineByName("JavaScript");
String textToEncrypt = textfieldInput.getText();
String encryptedText = "";
String encryptedText = "";
for (int i = 0; i < textToEncrypt.length(); i++) {
int unencrypted = textToEncrypt.charAt(i);
interpreter.put("n", unencrypted);
try {
// Calculate the result now that n is set.
Object result = interpreter.eval(expression);
// result is a double which we need to cast, or round.
int encryptedChar = (int) Double.parseDouble(result.toString());
encryptedText += (char) encryptedChar;
} catch (ScriptException ex) {
System.err.println("Cannot evaluate: " + expression);
// Handle unevaluateable formula here…
}
}
Вам может потребоваться добавить некоторые незначительные изменения, чтобы адаптировать фрагмент к вашим потребностям.
Приветствия