Java 扫描仪未在StringBuilder上工作

Java 扫描仪未在StringBuilder上工作,java,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 = ne

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

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);
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException、IOException{
BufferedReader文件=新的BufferedReader(新文件读取器(“mfile.txt”);
列表=新的ArrayList();
字符串str;
StringBuilder文件数据=新的StringBuilder();
Scanner-tokniser=新扫描仪(filedata.toString());
而((str=file.readLine())!=null){
filedata.append(str);
}
tokniser.useDelimiter(“[^a-z]”);
while(toknizer.hasNext()){
add(toknizer.next());
}
系统输出打印项次(列表);
}
此时,我只想提取用小字母书写的文本。但是程序正在打印一个空列表。调试显示
tokniser.hasNext()
中返回false,而(tokniser.hasNext())
。 怎么了?我是否使用了错误的正则表达式?我从中得到了使用
[^a-z]
的想法

您刚刚在一个空字符串周围创建了一个
扫描器。
那不会有任何代币

字符串是不可变的;稍后追加到
StringBuilder
不会影响传递给
扫描仪的现有
String
实例

您刚刚在一个空字符串周围创建了一个
扫描器。
那不会有任何代币


字符串是不可变的;以后添加到
StringBuilder
不会影响传递给
扫描仪的现有
String
实例

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());
}
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共静态void main(字符串[]args){
List List=new ArrayList();//如果List是泛型的,那么ArrayList也应该是泛型的
扫描仪输入=空;
试一试{
输入=新扫描仪(新文件(“mfile.txt”);
}捕获(例外e){
System.out.println(e.getStackTrace());
}
输入。使用分隔符(“[^a-z]”);
while(input.hasNext()){
字符串parse=input.next();
如果(!parse.equals(“”){
list.add(解析);
}
}
System.out.println(list.toString());
}

现在您不必使用
BufferedReader
FileReader
StringBuilder
,为什么不这样做呢

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());
}
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共静态void main(字符串[]args){
List List=new ArrayList();//如果List是泛型的,那么ArrayList也应该是泛型的
扫描仪输入=空;
试一试{
输入=新扫描仪(新文件(“mfile.txt”);
}捕获(例外e){
System.out.println(e.getStackTrace());
}
输入。使用分隔符(“[^a-z]”);
while(input.hasNext()){
字符串parse=input.next();
如果(!parse.equals(“”){
list.add(解析);
}
}
System.out.println(list.toString());
}
现在您不必使用
BufferedReader
FileReader
StringBuilder