1

次の形式のエントリで構成される .csv ファイルがあります。

question,option1,option2,option3,option4,answer

この .csv ファイルを読み取り、テーブルにデータを挿入したいと考えています。これを行うためにstring.splitメソッドを使用していますが、たとえば次の場合は正常に機能します:-

   String a="hi,a,b,c,d,e";
    String[] b=a.split(",");

output is:-
b[0]=hi
b[1]=a
b[2]=b
b[3]=c
b[4]=d
b[5]=e

しかし、間にスペースを使用すると、エラーが発生します: for eg:-

String a="hi how are you,a,b,c,d,e";
String[] b=a.split(",");

データベースに値を格納するサーブレットでこの概念を使用しています。サーブレット コードは次のとおりです。

 File file=new File(path2);
        Scanner inputstream=new Scanner(file);
        while(inputstream.hasNext()){
            String data=inputstream.next();
            String[] val=data.split(",");
            String sql4="insert into "+name+"(question,option1,option2,option3,option4,answer) values('"+val[0]+"','"+val[1]+"','"+val[2]+"','"+val[3]+"','"+val[4]+"','"+val[5]+"')";
            s.execute(sql4);
        }

Array index out of bound 例外を取得しています。

助けてください。

ありがとうございました。:)

4

4 に答える 4

1

このコードを試して、

        File file = new File(path2);
    String data = new Scanner(file).useDelimiter("\\A").next();
    String[] val = data.split(",");
    String sql4 = "insert into " + name + "(question,option1,option2,option3,option4,answer) values('" + val[0] + "','" + val[1] + "','" + val[2] + "','"
            + val[3] + "','" + val[4] + "','" + val[5] + "')";
    s.execute(sql4);

ストリームを反復処理している場合は、ストリームを完全に読み取った後に文字列を分割する必要があります。完全なデータがまだない可能性があるため、サイクルごとに分割しても同じ出力が得られない場合があります。

スキャナ クラスを使用して文字列に変換する方法の詳細 - Stupid Scanner Tricks

于 2013-10-14T17:18:50.213 に答える
0

エラーの場所がわかりません。パラメーターとして渡す区切り文字 (',') を検索するため、文字列を次のように分割します。

b[0]=hi how are you
b[1]=a
b[2]=b
b[3]=c
b[4]=d
b[5]=e
于 2013-10-14T16:58:11.973 に答える
0

コードに問題はないようです。CSV ファイルで発生する可能性が最も高いです。
また、非常にばかげた推測をして、テスト ケースを CSV 形式で変更するときに、カンマをスペースに置き換えていないことを確認させてください...!?
私は非常にばかげた推測をしていることを知っていますが、私を信じてください、私は本当にばかげたことをし、それを責めるのは自分だけでした:D

PS: CSV のデータを「一度」手動で変更したと仮定しています。そうでない場合は無視してください。

于 2013-10-14T17:16:02.643 に答える