试图从列表中找到最后一个元素(带文件输入)

时间:2014-02-06 19:29:20

标签: java list file-io arraylist

输入看起来像

a b c d 4
e f g h 2

其中每一行都会像列表一样读取,整数表示为列表中的索引

我首先尝试读取文件行be line并将其存储在列表中。继承人我有什么

public class FileReader {

    public static void main(String[] args) {
        String line = null;
        List<String> list = new ArrayList<String>();

        try {
            FileInputStream fstream = new FileInputStream("test.txt");
            DataInputStream in = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            // File file = new File("test.txt");
            // Scanner scanner = new Scanner(file);
            while ((line = br.readLine()) != null) {
                list.add(line);
            }

            System.out.println(list);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

现在我想从列表中删除空格并将值存储在char数组中然后我计划向后遍历该数组直到第n个元素,具体取决于n的输入。

String[] elements = line.trim().split("\\s");
char[] chars = new char[elements.length - 1];
int i= Integer.parseInt(elements[elements.length - 1]);
for (i = 0; i < elements.length - 1; i++)
    char[i] = elements[i].charAt(i);

之前有人向我提供了这段代码,我尝试了它,它在String []元素上抛出了一个nullpointerexception。

2 个答案:

答案 0 :(得分:2)

这是因为你在这里运行直到行为空

    while((line = br.readLine()) != null)
    {   
            list.add(line);

    }

然后你试图打电话给.trim()

您的意思是在list中处理字符串吗?

如果是这样尝试循环遍历您的列表,您已经正确地拆分它并获取最后一个元素。你需要做的就是计算偏移量,在这种情况下,它将是长度 - 1 - 最后一个元素,在你的String []元素中你可以打印出来。

    for (int i = 0; i < list.size(); i++)
    {
        String currentLine = list.get(i);
        String[] elements = currentLine.trim().split("\\s");
        int lastElement = Integer.parseInt(elements[elements.length - 1]);

        String desiredValue = elements[elements.length - 1 - lastElement];
        System.out.println("desiredValue = " + desiredValue);
    }

答案 1 :(得分:0)

你可以避免你正在做的大部分工作。我不知道你的输入是否需要很大的灵活性(如有必要,还需要代码),但在你的例子中,你只有1位数的索引。

完全避免所有遍历和循环:

        String currentLine = file.nextLine();
        //Find value from last space in the string, until the end of the string (will be the number)
        int index = Integer.parseInt(currentLine.substring(
                currentLine.lastIndexOf(' ') + 1, currentLine.length()));
        //Remove all spaces from the current line
        currentLine = currentLine.replaceAll("\\s+","");
        //Remove the index at the end from the string, leaving only the characters
        currentLine = currentLine.substring(0, currentLine.indexOf(index + ""));

        char desiredValue = currentLine.charAt(currentLine.length() - index);
        System.out.println("desiredValue = " + desiredValue);

如果以后都不需要这样做,这可以节省大量的数据添加内容,只需要第一次完成。