1

私のコードのバグはどこにあるのか指摘していただけますか?

次のデータ構造を持つ単純なテキストファイルがあります。

something1
something2
something3
...

その結果、String[]すべての要素がファイルの最後の要素になります。私は間違いを見つけることができませんが、それはどこかで間違っていますline.setLength(0);

何か案は?

public String[] readText() throws IOException {
    InputStream file = getClass().getResourceAsStream("/questions.txt");
    DataInputStream in = new DataInputStream(file);

    StringBuffer line = new StringBuffer();
    Vector lines = new Vector();

    int c;
    try {
        while( ( c = in.read()) != -1 ) {
            if ((char)c == '\n') {
                if (line.length() > 0) {
                    // debug
                    //System.out.println(line.toString());
                    lines.addElement(line);
                    line.setLength(0);
                }
            }
            else{
                line.append((char)c);
            }
        }
        if(line.length() > 0){
            lines.addElement(line);
            line.setLength(0);
        }

        String[] splitArray = new String[lines.size()];
        for (int i = 0; i < splitArray.length; i++) {
            splitArray[i] = lines.elementAt(i).toString();
        }
        return splitArray;

    } catch(Exception e) {
        System.out.println(e.getMessage());
        return null;
    } finally {
        in.close();
    }
}
4

2 に答える 2

3

StringBuffer明らかなエラーが1つあります。同じインスタンスをに複数回保存していて、同じインスタンスを。でVectorクリアしています。私はあなたがこのようなことをしたいと思っていると思いますStringBuffersetLength(0)

 StringBuffer s = new StringBuffer();
 Vector v = new Vector();

 ...
 String bufferContents = s.toString();
 v.addElement(bufferContents);
 s.setLength(0);
 // now it's ok to reuse s
 ...
于 2012-12-05T15:13:48.710 に答える
-1

問題がString[]内のファイルの内容を読み取ることである場合は、実際にapache commonのFileUtilクラスを使用して配列リストを読み取り、配列に変換することができます。

List<String> fileContentsInList = FileUtils.readLines(new File("filename"));
String[] fileContentsInArray = new String[fileContentsInList.size()];
fileContentsInArray = (String[]) fileContentsInList.toArray(fileContentsInArray);

指定したコードでは、長さを0に設定するのではなく、StringBufferを再初期化できます。

于 2012-12-05T15:44:53.200 に答える