我正在尝试将值和键从选项框中作为逗号分隔的String传递给Java类,然后将Java解析为两个不同的字符串。下面,我演示了一个将值和键组合成一个字符串的Java迭代器:
while(i.hasNext())
{
Entry<String,String> currentData = i.next();
String value=currentData.getValue() + "," + currentData.getKey();
String key=currentData.getKey();
out.println("<option value=\"");
out.println(value);
out.println("\">");
out.println(key);
out.println("</option>");
System.out.println(value + " is the value!");
}
这很有效,因为它以下列格式输出键值对:
valuehere,KeyHere
然后,我使用Java类解析服务器端的String:
String[] tempContainer = request.getParameter("container").split(",");
String containerValue = tempContainer[0];
String containerKey = tempContainer[1];
当我打印containerKey时,它按预期打印:
containerKeyHere
但是,当我打印containerValue时,它会在实际打印值之前打印一个新行。因此,当我尝试将此变量传递给函数时,该函数因新行而失败。我是否错误地使用了split()函数?或者有更好的方法来处理这种解析吗?
谢谢!
答案 0 :(得分:1)
在分割逗号之前,您可以尝试从字符串中删除所有空格字符:
String[] tempContainer = request.getParameter("container").replace("\\s+"."")
.split(",");
答案 1 :(得分:1)
您是否尝试过修剪子串? trim
函数返回字符串的副本,省略前导和尾随空格。
String containerKey = tempContainer[1].trim();
答案 2 :(得分:1)
问题基本上是你的字符串末尾有一个新行。解决此问题的最简单方法是使用StringUtils.chomp() method
另一种方法是构建自己的chomp方法,将“\ n”,“\ r”和“\ r \ n”替换为“”。
答案 3 :(得分:1)
我因为你的out.println构造而认为它。
尝试使用out.print()而不是out.println()
您正在生成的HTML
<option value="
value
">
key
</option>
这意味着在“价值”之前有一个换行符!这只是containerValue之前的换行符。
另一种可能性,而不是使用out.print将是使用printf
out.printf("<option value=\"%s\">%s</option>", value, key);
恕我直言你的解析似乎是正确的。
答案 4 :(得分:0)
在分割之前你需要修剪这条线,因为它在末尾有新的线条字符
String[] tempContainer = request.getParameter("container").trim().split(",");
String containerValue = tempContainer[0];
String containerKey = tempContainer[1];
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#trim()
希望这有帮助!