2017-02-12 71 views
4

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

我得到的字符串的多维数组是从一个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"}; 

此外,我搜索了一个解决方案,并得到了一些回答rs和想法添加.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,但首先检查您是否已经安装了一个。

回答

1

而不是对抗的框架,这里有一个1-衬里CSV数组转换为二维数组:

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

嘿它的工作完美!这是我寻找的解决方案,但我不知道如何实施。说实话,我从来没有想到如何做到这一点。非常感谢您的帮助! –