2012-08-16 53 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); 

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