我有这个代码,它将文本文件读入数组列表,然后打印出数组列表。我怎样才能读取文件并将其存储到数组列表中,并将任何大写字母改为小写字母并删除所有标点符号?我一直在寻找互联网,但无法找到任何解决方案。
例如,文本文件可以是:
It's a SuNnY day Today!
,结果应为:
its a sunny day today
import java.io.*;
import java.util.*;
public class junk
{
private static ArrayList<String> list = new ArrayList<String>();
public static void main (String[] args)
{
try {
Scanner s = new Scanner(new File("test.txt"));
while (s.hasNext()) {
list.add(s.next());
}
} catch (Exception e) {
e.printStackTrace();
}
int n = list.size();
for(int i = 0; i < n ; i++) {
System.out.println(list.get(i));
}
}
}
此行代码可以正常工作并删除标点并使字母小写,但只有当String s =&#34; Blah Blah Blah ;;;&#34;
String s1 = s.replaceAll("\\p{Punct}|\\d","").toLowerCase();
如何让它适用于我的数组列表?
答案 0 :(得分:0)
抱歉,我在编写示例代码时看到了更新的问题。 对于重新定义的问题,我猜你的意思是replaceAll生效但不会放回到ArrayList中。 repalceAll将生成一个新的String对象,而不会影响数组中的对象。因此,您需要在从文件中读取之后和之后再添加#34;添加&#34;它进入ArrayList对象。
========================
尝试使用此代码段,您可能需要调整标点符号的判断。
public void convert(String filename) throws FileNotFoundException,
IOException {
List<String> list = new ArrayList<String>();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(filename));
String s = reader.readLine();
while (s != null) {
// should work in this loop
String s1 = s.replaceAll("\\p{Punct}|\\d","").toLowerCase();
list.add(s1.toString());
}
} finally {
if (reader != null)
reader.close();
}
for (String s : list) {
// will not work in this loop
//String s1 = s.replaceAll("\\p{Punct}|\\d","").toLowerCase();
// list.add(s1.toString());
System.out.println(s);
}
}