如何获取数组列表位置并将其转换为字符串?

时间:2015-12-11 02:19:01

标签: java arraylist nullpointerexception

希望这将是一个简单的答案,我只是忽略了一些小事。

目标:获取数组列表(当前包含文本文件中的文本行)并将String变量设置为等于指定的数组列表位置。 目前,每一行都是从Encyclopedia文件中获取的原始文本。我需要能够通过.replaceAll函数删除非alpha。但是,我当前的程序返回一个空指针异常,我在理解原因时遇到了一些麻烦。我对Java很新,所以非常感谢完整的答案和解释。

我的代码:(我的老师告诉我们使用EasyReader课程让我们的生活更轻松......)

EasyReader fileIn = new EasyReader("Encyclopedia.txt"); 
public void createList()
    {
        String x=fileIn.readLine();
        ArrayList<String> list = new ArrayList<String>();

        while((!fileIn.eof()))
        {
            String y=fileIn.readLine();
            list.add(y);
        }
        int count=0;
        while(count<list.size())
        {
            String temp=list.get(count);
            temp.replaceAll("[^a-zA-z ]", ""); //null pointer points to this line
            temp.toLowerCase();                //and this line
            list.set(count, temp);
            count++;
        }
        count=0;
        while(count<list.size());
        {
            System.out.println(list.get(count));
            count++;
        }
        System.out.println(list.size());
        while(count<list.size())
        {
            fileOut.println(list.get(count));
            count++;
        }
        fileOut.close();
}

事先感谢您的帮助:)

3 个答案:

答案 0 :(得分:1)

我想我发现了你的错误!

你的while循环应该只到list.size() - 1而不是list.size()那里。见下文:

 while(count<list.size()- 1)
    {
         String temp=list.get(count);
         temp.replaceAll("[^a-zA-z ]", ""); //null pointer points to this line
         temp.toLowerCase();                //and this line
         list.set(count, temp);
         count++;
    }

答案 1 :(得分:0)

请尝试替换您用此注释的两行:

temp = temp.replaceAll("[^a-zA-z ]", ""); 
temp = temp.toLowerCase();

这是因为replaceAll()方法不会更改原始字符串本身,而是返回一个替换了字符的新字符串。与toLowerCase()相同。

答案 2 :(得分:0)

你犯了两个错误:

1)replaceAll正则表达式应为temp.replaceAll("[^a-zA-z]", "")(z之后没有空格)

2)您可以将两行合并为一个方法temp.replaceAll("[^a-zA-z]", "").toLowerCase()

3)您需要将新返回的String保存到原始变量temp:

temp = temp.replaceAll("[^a-zA-z]", "").toLowerCase();

正如@Suitangi所提到的,replaceAll()方法不会更改原始字符串本身,而是返回一个替换字符的新字符串。与toLowerCase()相同。

希望有所帮助。

编辑: 在最后一次迭代中String temp = null; 在正则表达式之前添加if条件进行检查:

if (temp!=null){
    temp = temp.replaceAll("[^a-zA-z]", "").toLowerCase();
    list.set(count, temp);
    count++;
}