java中如何将一个txt文件中的数字读取到一个ArrayList集合中?

txt中有很多数字,数字与数字之间有空格,要把这些数字截取出来放到ArrayList中

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按行取得文件内容,最后用正则表达式来分离出目标数据放入结果集中。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-24
对读取出来的String一个个字符循环

不是'0'-'9'的字符就换一下

前一个空格的直接去掉,前一个不是空格的换成空格。

这样出来以后就只有数字了。本回答被提问者采纳
第2个回答  2015-08-11
让我的话,我只能用笨办法一行一行的读取成string然后再放进去。
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
while(line!=null){
//存放到list里
}
相似回答