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