3

3チェックボックスから値を取得するフォームがあります。次のようにサーブレットの値を取得しています。

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ではなく、空の文字列に初期化しnullます。

String csvSkills = "";

文字列をnullJavaで連結すると、のテキスト表現が得られますnull。さらに、リストの最後にコンマを付けたくない場合は、条件付きでコンマを追加できます。このようなもの:

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

他の回答は、nullが存在する理由を示しています。csvSkills文字列を初期化していないのです。

知っておくべきもう1つのことは、csvSkillsには​​StringではなくStringBuilderを使用する必要があるということです。ループ内の文字列に追加することは非常に非効率的です。舞台裏では、コンパイラはループを通過するたびに新しいStringBuilderを作成して、2つの文字列を連結し、それを破棄します。ループを通過するたびに、その反復用に作成された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ユーティリティの作者です。これには、OstermillerCSVライブラリを使用することをお勧めします。必要な場合にのみコンマを追加するロジックを処理するだけでなく、追加するフィールドに引用符またはコンマが含まれている場合の引用符とエスケープも処理します。

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 に答える
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 csvSkills = "";

より良い解決策は、多くのsStringBuilderを連結するために使用することです。String

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 に答える