2013-02-23 65 views
3

我有一個表單,我從3複選框獲取值。我在servlet獲取值如下,在JAVA中創建CSV字符串時添加空值

String csvSkills = null; 

String[] skills = request.getParameterValues("chkSkills"); 

for(int i=0; i<skills.length; i++){ 
    csvSkills += skills[i]+","; 
} 

System.out.println(csvSkills); 

OUTPUT:

nullPHP,JAVA,MYSQL, 

雖然最初顯示csvSkills值null空值。我嘗試了很多,不知道如何做到這一點。我的疑問是如何在沒有null的情況下製作csv值? 希望我的問題很明確。提前致謝 !

回答

2

其他答案告訴你爲什麼有一個null:你沒有初始化你的csvSkills字符串。

你應該知道的另一件事是你應該使用一個StringBuilder進行csvSkills而不是String。在循環內附加一個字符串是非常低效的。在幕後,編譯器每次通過循環創建一個新的StringBuilder,將兩個字符串連接在一起,然後丟棄它。每次循環時,爲該迭代創建的StringBuilder的大小都越來越大。你想爲所有的附加使用一個StringBuilder實例。

StringBuilder csvSkills = new StringBuilder(); 
for (String s: request.getParameterValues("chkSkills")){ 
    if (csvSkills.length > 0) csvSkills.append(","); 
    csvSkills.append(s); 
} 
return csvSkills.toString(); 

我是處理CSV的免費開源Java實用程序的作者。我建議使用the Ostermiller CSV library這個。除了處理僅在需要時附加逗號的邏輯之外,它還將處理引號和轉義,以防您正在追加的字段包含引號或逗號。

StringWriter writer = new StringWriter(); 
CSVPrinter csvSkills = new ExcelCsvPrinter(writer); 
for (String s: request.getParameterValues("chkSkills")){ 
    csvSkills.write(s); 
} 
return writer.toString(); 
2

csvSkills初始化爲空字符串,而不是null

String csvSkills = ""; 

當您連接在Java null字符串,你得到的null文本表示。此外,如果您不想在列表末尾添加尾隨逗號,則可以有條件地添加逗號。事情是這樣的:

for (int i=0; i<skills.length; i++){ 
    if (i > 0) { 
     csvSkills += ","; 
    } 
    csvSkills += skills[i]; 
} 
+0

對不起Asaph。我已經嘗試過了。它給出了相同的答案.. – 2013-02-23 16:29:59

+0

@JavaBegginer:'null'是'skill'數組中的第一個值嗎?您的表單以某種方式提交'null'作爲第一個值? – Asaph 2013-02-23 16:33:18

+0

@Asaph上面是錯誤的將要追加,像php,mysql,java, – 2013-02-23 16:49:10

1

你想「csvSkills」初始化爲「」(空字符串),而不是空。

還可以考慮添加一個if語句,以確定是否添加了逗號,以便末尾沒有尾隨逗號。

+0

我無法將值初始化爲空 – 2013-02-23 16:30:40

+0

爲什麼不能?這是String串聯的標準習慣用法。 – 2013-02-23 16:31:40

+0

現在我確實喜歡這個String csvSkills =「''」;並獲取輸出爲''PHP,JAVA,MYSQL, – 2013-02-23 16:33:55

0

您需要將csvSKills初始化爲空字符串""

String csvSkills = ""; 

更好的解決方案將使用StringBuilder爲串聯很多String S:

StringBuilder csvSkills = new StringBuilder(); 

String[] skills = request.getParameterValues("chkSkills"); 

for (String skill : skills) { 
    csvSkills.append(skill).append(","); 
} 

System.out.println(csvSkills.toString()); 
0

您應該添加逗號只有當csvSkills大於0

StringBuilder csvSkills = new StringBuilder(); 

String[] skills = request.getParameterValues("chkSkills"); 

for (String skill : skills) 
{ 
    if(csvSkills.length() > 0) 
    csvSkills.append(","); 

    csvSkills.append(skill); 

} 
+1

它應該來csvSkills.length()... Thankyou ..它的工作原理... – 2013-02-23 16:46:15