我是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”。我该如何解决?
谢谢。
答案 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…
}
}
您可能需要添加一些小的修改,以使该代码段适应您的需求。
欢呼