java中如何将一个txt文件中的数字读取到一个ArrayList集合中?
3个回答
展开全部
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileParser {
private File file;
private BufferedReader reader;
private InputStream is;
private InputStreamReader isReader;
public FileParser() {}
public FileParser(String filePath) {
file = new File(filePath);
initReader();
}
/**
初始化文件输入流,为文件读取做准备
*/
private void initReader() {
if(file != null && file.isFile() && file.canRead()) {
//文件存在可读取并且是“文件”而不是目录
try {
is = new FileInputStream(file);//创建文件输入流
isReader = new InputStreamReader(is);//创建输出流的Reader
reader = new BufferedReader(isReader);//用于按行读取文件
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
转换文件内容,将文件中的数据转换成List<Integer>
*/
public List<Integer> parse() {
List<Integer> lstNumber = null;//最终结果保存在这里
String txtLine = null;//临时变量,保存按行读取到的字符串
String splitRegexp = "([0-9]+)\\s?";//匹配数字的正则表达式
Pattern pattern = Pattern.compile(splitRegexp);//编译正则
Matcher matcher = null;//正则的Matcher对象
//开始读取文件
if(reader != null) {
lstNumber = new ArrayList<Integer>();//初始化List
try {
while((txtLine = reader.readLine()) != null) {//按行读取文件
matcher = pattern.matcher(txtLine);//获取matcher实例,准备进行查找
while(matcher.find()) {//查找符合条件的匹配组,将结果放入List
lstNumber.add(Integer.valueOf(matcher.group(1)));
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
try {
reader.close();
isReader.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return lstNumber;//返回结果
}
public static void main(String[] args) {
FileParser fileParser = new FileParser("D:\\test.txt");
System.out.println(fileParser.parse());
}
}
test.txt内容格式如下:
1 10 100 99 5 76 82 93
20 123 75 1232 85 12
程序核心就是用正则表达式来查找文件中符合要求的内容,效率要比字符串的分割操作高。大体流程就是判断文件是不是存在且可读取,然后通过BufferedReader按行取得文件内容,最后用正则表达式来分离出目标数据放入结果集中。
展开全部
对读取出来的String一个个字符循环
不是'0'-'9'的字符就换一下
前一个空格的直接去掉,前一个不是空格的换成空格。
这样出来以后就只有数字了。
不是'0'-'9'的字符就换一下
前一个空格的直接去掉,前一个不是空格的换成空格。
这样出来以后就只有数字了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
让我的话,我只能用笨办法一行一行的读取成string然后再放进去。
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
while(line!=null){
//存放到list里
}
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
while(line!=null){
//存放到list里
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询