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多次存储同一个实例Vector,并且StringBuffer使用setLength(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);

在您指定的代码中,您可以重新初始化 StringBuffer,而不是将长度设置为 0。

于 2012-12-05T15:44:53.200 回答