2017-02-12 70 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

嘿它的工作完美!這是我尋找的解決方案,但我不知道如何實施。說實話,我從來沒有想到如何做到這一點。非常感謝您的幫助! –