繁体   English   中英

如何避免servlet将多维数组字符串转换为一维字符串数组?

[英]How to avoid servlet converting a multidimensional array of string into one-dimensional array of strings?

我得到了一个从jsp发送的多维字符串数组,当我尝试获取数组并将其设置为servlet中的变量时,我意识到控制器将多维数组字符串转换为一维字符串数组,我打印数组在jsp一侧的console.log中只是为了确保数组包含字符串数组而不仅仅是字符串,并且chrome的日志显示它一切正常,所以我想这个问题必须在servlet的一边。 这不是错误,但不是我期望在我的应用程序中我想要实现的行为。

这是我遇到的代码:

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中请求的多维数组的精确副本?

非常感谢提前。


Bohemian的 解决方案

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,但首先要检查是否已经安装了一个。

这里是一个将CSV数组转换为2D数组的单线程,而不是对抗框架:

String[][] arrayCompra = Arrays.stream(request.getParameterValues("arraycompra[]"))
    .map(s -> s.split(","))
    .toArray(String[][]::new);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM