【发布时间】:2017-06-30 07:32:34
【问题描述】:
问题
我得到了一个从 jsp 发送的多维字符串数组,当我尝试获取该数组并将其设置为 servlet 中的一个变量时,我意识到控制器将多维数组字符串转换为一维字符串数组,我从 jsp 的一侧在 console.log 中打印了数组,以确保数组包含字符串数组而不仅仅是字符串,并且 chrome 的日志显示一切正常,所以我想问题一定出在小服务程序。这不是错误,但不是我期望在我的应用程序中实现下一步的行为。
这是我遇到问题的代码:
String[] arrayCompra = request.getParameterValues("arraycompra[]");
所以基本上,当我将数组从请求设置为 servlet 端的数组时,servlet 正在做的事情是这样的:
String[][] array = { {"a","b","c"} , {"d","e","f"} };
进入这个:
String[] array = {"a,b,c", "d,e,f"};
此外,我搜索了一个解决方案并得到了一些答案和想法,例如添加 .clone();但它给了我同样的结果。而且我知道有一个 string.Split 方法,但是我必须在数组中迭代以拆分每个字符串,然后将每个结果数组设置为字符串的多维数组,如果我可以避免或解决主要问题,我发现没有必要.
我做错了什么?有没有办法实现我想要的?有没有更好的方法来制作我从 servlet 中的请求中获得的多维数组的精确副本?
非常感谢。
解决方案 波西米亚人
String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]")).map(s -> s.split(",")).toArray(String[][]::new);
顺便说一句...此解决方案的某些方法需要 JDK 8 或更高版本,而我使用的是 1.7,所以我面临...
lambda expressions are not supported in -source 1.7
(use -source 8 or higher to enable lambda expressions)
要解决这个问题,只需将源代码的编译器版本更改为 JDK 8 的项目属性,但首先检查是否已安装。
【问题讨论】:
标签: java arrays servlets multidimensional-array