我正在尝试创建一个JSP,它从文本区域获取文本,并根据您是选择编码还是解码,对文本进行编码或解码编码文本。编码部分工作,但解码选项抛出
org.apache.jasper.JasperException:java.lang.NumberFormatException:对于输入字符串:“”。
这是我的代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Xorcoder</h1>
<form method="post">
<label>Key</label><input type="text" name="key" />
<p>Encode<input type="radio" name="option" value="encode" /></p>
<p>Decode<input type="radio" name="option" value="decode" /></p>
<p><textarea name="txt" style="width:400px;height:200px" >
<%String txt = "";
int key;
String option = "";
if(request.getParameter("txt") != null) {
txt = request.getParameter("txt");
}
if(request.getParameter("key") != null) {
key = Integer.parseInt(request.getParameter("key"));
}
else {
key = 0;
}
if(request.getParameter("option") != null) {
option = request.getParameter("option");
}
char temp;
int[] array = new int[(txt.length())];
if(option.equals("encode")) {
for(int i = 0; i < array.length; i++) {
temp = txt.charAt(i);
array[i] = temp^key;
}
for(int i = 0; i < array.length; i++)
out.print(array[i] + " ");
}
else if(option.equals("decode")){
String[] array2 = txt.split(" ");
int temp2;
for(int i = 0; i < array2.length; i++) {
temp2 = Integer.parseInt(array2[i]);
temp2 = temp2^key;
out.print((char)temp2);
}
}
%></textarea></p>
<p><input type="submit" value="Press" /></p>
<p><input type="reset" value="Clear" /></p>
</form>
</body>
</html>
答案 0 :(得分:2)
问题从这里开始:
for (int i = 0; i < array.length; i++)
out.print(array[i] + " ");
}
这会在每个数字后面输出一个空格。不在每个号码之间。
然后你将这个字符串分开:
String[] array2 = txt.split(" ");
和(不出所料)数组的最后一个元素将是一个空字符串。
解决方案:
不要输出最后的空格。
在拆分
在致电parseInt
之前检查字符串是否为空。
(您不需要检查null
。split
的规范保证数组中没有空值...)
答案 1 :(得分:1)
java.lang.NumberFormatException
告诉您""
不是数字。问题在于您使用Integer.parseInt
。在使用Integer.parseInt(...)
之前,请检查该元素的输入是否为空(并且不为null,仅在参数可以为null时检查此条件,否则不需要)。如果为空,Integer.parseInt
将抛出该错误。
答案 2 :(得分:0)
希望您解决难题所需要做的就是在代码的最后一个循环中添加 if 语句:
for(int i = 0; i < array2.length; i++) {
if (array2[i].isEmpty()) //checks whether the length of string is 0
continue; //skips current iteration and moves further
temp2 = Integer.parseInt(array2[i]);
temp2 = temp2^key;
out.print((char)temp2);
}
另外,我想告诉您&lt;%,%&gt; 等标签之间没有任何空格,而其他html标签会让您的textarea有所不同清洁器。我的意思是,尝试使用
<textarea name="txt" style="width:400px;height:200px" ><%
而不是
<textarea name="txt" style="width:400px;height:200px" >
<%
这样你的textarea就不会有任何无用的空格字符了。
祝你好运:)