Java使用replaceAll方法

时间:2014-06-23 00:24:29

标签: java

我有这个代码,它将文本文件读入数组列表,然后打印出数组列表。我怎样才能读取文件并将其存储到数组列表中,并将任何大写字母改为小写字母并删除所有标点符号?我一直在寻找互联网,但无法找到任何解决方案。

例如,文本文件可以是:

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();

如何让它适用于我的数组列表?

1 个答案:

答案 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);
    }
}