0

我编写了一个程序,该程序必须从文件中获取输入并仅从中提取文本,同时将其内容保存到数组中。我的文本文件内容是:

There is some!text.written%in
the FILE[That]=Have+to`be==separated????

我试图编码的是:

public static void main(String[] args) throws FileNotFoundException, IOException {
    BufferedReader file = new BufferedReader(new FileReader("mfile.txt"));
    List<String> list = new ArrayList();
    String str;
    StringBuilder filedata = new StringBuilder();
    Scanner toknizer = new Scanner(filedata.toString());
    while((str=file.readLine())!=null){
        filedata.append(str);
    }
    toknizer.useDelimiter("[^a-z]");
    while(toknizer.hasNext()){
        list.add(toknizer.next());
    }
    System.out.println(list);
}

此时我只想提取用小字母书写的文本。但是程序正在打印一个空列表。调试显示toknizer.hasNext()while(toknizer.hasNext()). 怎么了?我使用了错误的正则表达式吗?我[^a-z]这里得到了使用的想法。

4

2 回答 2

5
Scanner toknizer = new Scanner(filedata.toString());

您刚刚在Scanner一个空字符串周围创建了一个。
那不会有任何令牌。

字符串是不可变的;附加到StringBuilder后者不会影响String您传递给Scanner.

于 2013-05-17T19:52:07.680 回答
0

为什么不这样做呢?

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;



public static void main(String[] args) {
    List<String> list = new ArrayList<String>(); // If List is generic then ArrayList should be too
    Scanner input = null;

    try {
        input = new Scanner(new File("mfile.txt"));
    } catch(Exception e) {
        System.out.println(e.getStackTrace());
    }

    input.useDelimiter("[^a-z]");
    while(input.hasNext()) {
        String parse = input.next();
        if(!parse.equals("")) {
            list.add(parse);
        }
    }

    System.out.println(list.toString());
}

现在您不必使用 aBufferedReaderFileReadera StringBuilder

于 2013-05-17T20:22:21.213 回答