希望这将是一个简单的答案,我只是忽略了一些小事。
目标:获取数组列表(当前包含文本文件中的文本行)并将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();
}
事先感谢您的帮助:)
答案 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++;
}