是否可以使用字符串作为计算?

时间:2019-01-31 16:43:38

标签: java string user-interface math input

我是Jave的初学者,我正在尝试开发一个使用cesar算法进行加密的程序。

String Text;
String encryptedText = "";
char character;
int n;

Text = mainprogramm.tainput.getText();
int length = Text.length();
for (int i = 0; i < length; i++) {
    character = Text.charAt(i);
    n = (int) character;
    encryptedText = encryptedText + (char) tencryptingformula.getText();
}
tencryptedformula是一个文本字段,其中写入了计算: 2 * n + 1。如果我直接在我的代码中键入此公式,它可能会对其进行加密。但是我不能让它接受我的String作为公式。它给出错误:“不兼容的类型:字符串不能转换为Char”。我该如何解决?

谢谢。

2 个答案:

答案 0 :(得分:1)

据我了解,您正在尝试将字符串转换为计算。您不能简单地输入一个字符串并期望Java自动识别您要使用的字符串。

如果您问我的想法,则需要解析字符串以显式提取代数项并以编程方式替换运算符。直接在代码中使用它可能会容易得多,并且可能提供在不同公式之间切换的选项;而不是尝试编写一个解析器来评估任何通用表达式。

答案 1 :(得分:0)

您不能直接将字符串作为Java中的数学表达式来评估(这是一种编译语言)。您必须为此编写自己的解析器,这实际上是很多工作,而且其他人也已经完成了。

因此,另一种方法是从Java调用解释语言,例如通过使用 的JavaScript通过ScriptEngine。所以,你可以做的是让用户在文本框的一些输入公式,检索文本,并通过把一个字符的十进制值代入公式,它返回你的加密字符的十进制值进行评估。

示例(已测试 unested ):

// 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…
   }
}

您可能需要添加一些小的修改,以使该代码段适应您的需求。

欢呼