2012-08-16 52 views
-2

我試圖將一個選項框中的值和鍵作爲以逗號分隔的字符串傳遞給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[] tempContainer = request.getParameter("container").split(","); 
String containerValue = tempContainer[0]; 
String containerKey = tempContainer[1]; 

當我打印containerKey,其打印效果與預期:

containerKeyHere 

但是,當我打印containerValue時,它會在實際打印該值之前打印一個新行。所以,當我嘗試將這個變量傳遞給函數時,該函數因新行而失敗。我是否正確使用split()函數?還是有更好的方法來處理這個解析?

謝謝!

+0

「將此變量傳遞給一個函數,該函數失敗,因爲新行」---你能告訴我們函數嗎? – 2012-08-16 13:00:38

+0

如果您在構建xml時使用'out.print'而不是'out.println',它也會發生嗎? 'println'將在它打印的字符串後附加一個換行符。 – 2012-08-16 13:00:51

+0

也更新標題。 – 2012-08-16 13:02:15

回答

1

您可以嘗試在逗號分割之前去除從字符串中所有的空格字符:

String[] tempContainer = request.getParameter("container").replace("\\s+"."") 
                  .split(","); 
+0

我使用這種方法的唯一問題是密鑰實際上可能有空格,所以如果我消除空格,將會存儲錯誤的密鑰字符串。 – TimeBomb006 2012-08-16 13:04:11

+0

@ TimeBomb006好吧,你並不是所有人都在_all_空格上分割,我只是在這個例子中做了這個,你可以選擇只分割'\ n' – 2012-08-16 13:06:00

1

您是否嘗試過修剪子串? trim函數返回字符串的副本,省略前導和尾隨空白。

String containerKey = tempContainer[1].trim(); 
1

問題實質上是,您在字符串末尾有一個新行。解決此問題的最簡單方法是使用StringUtils.chomp() method

另一種方法是構建自己的chomp方法,用「」替換「\ n」,「\ r」和「\ r \ n」。

1

我asume它的,因爲你的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); 

恕我直言,你的分析似乎只是正確的。