3

我有一个表格,我从 3 复选框中获取值。我在 servlet 中得到的值如下,

String csvSkills = null;

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

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

System.out.println(csvSkills);

输出:

nullPHP,JAVA,MYSQL,

虽然最初 csvSkills 值为 null,但会显示 null 值。我尝试了很多,不知道如何做到这一点。我的疑问是如何在没有null开始的情况下制作 csv 值?希望我的问题很清楚。提前致谢 !

4

5 回答 5

2

其他答案告诉你为什么会有一个空值:你没有初始化你的 csvSkills 字符串。

您应该知道的另一件事是您应该为 csvSkills 使用 StringBuilder 而不是 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 实用程序的作者。我建议为此使用Ostermiller CSV 库。除了处理仅在需要时附加逗号的逻辑外,它还将在您附加的字段包含引号或逗号的情况下处理引用和转义。

StringWriter writer = new StringWriter();
CSVPrinter  csvSkills = new ExcelCsvPrinter(writer);
for (String s:  request.getParameterValues("chkSkills")){
    csvSkills.write(s);
}
return writer.toString();
于 2013-02-23T16:55:47.493 回答
2

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

String csvSkills = "";

null当你在 java 中连接字符串时,你会得到null. 此外,如果您不想在列表末尾添加逗号,则可以有条件地添加逗号。像这样的东西:

for (int i=0; i<skills.length; i++){
    if (i > 0) {
        csvSkills += ",";
    }
    csvSkills += skills[i];
}
于 2013-02-23T16:28:35.550 回答
1

您想将“csvSkills”初始化为“”(空字符串)而不是 null。

还可以考虑添加一个 if 语句来确定是否添加逗号,这样最后就没有逗号。

于 2013-02-23T16:29:07.847 回答
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);

}
于 2013-02-23T16:44:55.533 回答
0

您需要初始化csvSKills为空 String ""

String csvSkills = "";

一个更好的解决方案是StringBuilder用于连接很多Strings:

StringBuilder csvSkills = new StringBuilder();

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

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

System.out.println(csvSkills.toString());
于 2013-02-23T16:33:30.697 回答