扫描程序无法在StringBuilder上运行

时间:2013-05-17 19:49:55

标签: java

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

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())返回false。 怎么了?我使用错误的正则表达式吗?我想到了使用here中的[^a-z]

2 个答案:

答案 0 :(得分:5)

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

您刚刚在空字符串周围创建了Scanner 那不会有任何代币。

字符串是不可变的;稍后附加到StringBuilder不会影响您传递给String的现有Scanner实例。

答案 1 :(得分: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());
}

现在您不必使用BufferedReaderFileReaderStringBuilder