2

段落を含むtxtファイルから読み込んでおり、単語を解析してリストに挿入しています。ただし、スペースも挿入しています。どういうわけか、スペースが追加されるため、コンマまたはドットに遭遇するたびに私の正規表現が機能しないようです...誰かがそれを修正できる正規表現を提案できれば? ありがとう

public class Exercise225 {

    public static void main(String... args) throws FileNotFoundException {
        String file = "words.txt";
        Scanner inFile = new Scanner(new File(file));
        String[] words = null;

        String line = "";
        List list = new ArrayList();

        while (inFile.hasNextLine()) {
            line = inFile.nextLine();
            words = line.split("[\n|\r|\t| |,|.|)|(|-|\"|!]");

            for (int i = 0; i < words.length; i++) {
                list.add(words[i].toLowerCase());                   
            }
        }
        Collections.sort(list);

        System.out.println(list.size());

        Iterator listItr = list.iterator();

        while (listItr.hasNext()) {
            System.out.println(listItr.next());
        }

        inFile.close();

    }    
}
4

3 に答える 3

3

厳密に 1 つのセパレーターで分割する代わりに、量指定子を使用して1つ以上のセパレーターで分割できます。+また、文字クラスでパイプを使用する必要はありません。

String regex = "[\n\r\t ,.)(\"!-]+";
words = line.split(regex);
于 2012-12-25T20:19:10.540 に答える
0

以下の変更により、期待される結果が得られることを願っています

       String regEx = "[\n|\r|\t| |,|.|)|(|-|\"|!]";                
       line = inFile.nextLine().replaceAll(regEx+"^", "");          
       if(line.length()<=0)continue;                                
       words = line.split(regEx+"+");                            
于 2012-12-25T20:35:40.263 に答える
0

\\s+分割に使用する正規表現のスペースに使用します。これは、分割中に 1 つ以上の空白と一致します。

于 2012-12-25T20:19:14.417 に答える