文件中存储的是这个样子,只有1行(这1行可能很长):
暂认为只会出现这几种字符:
'['
' '
']'
','
[0-9]
即这种样子:
[5344,6022,1787,5553,140,5130,524,3450,4008,721,6154,5598,8219,4614,3404,8232,9023,4552,7711]
考虑用字符流读取。
考虑到整个文件字符可能很多,所以逐个读字符,边读边处理,而不是把所有内容都读到一个字符串中。
定义ArrayList变量list存储最终结果,定义一个StringBuilder变量s用于存储数字。
这里只考虑到这几种情况,其他情况暂不考虑:
-
遇到 “[” 或者 “ ”(空格),不做任何处理。
-
遇到数字,则加入s。
-
遇到 “,” 或者 “]” ,则把s加入list,清空StringBuilder。
代码:
import java.io.*;
import java.util.*;
public class TestData {
public static void data() {
List<String> list = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
try (
FileReader fileReader = new FileReader(文件路径)
) {
//每次读取的长度
int length = 0;
char[] buffer = new char[20];
while ((length = (fileReader.read(buffer))) != -1) {
if (length <= 0) {
continue;
}
//注意只能处理length个,否则会多算,因为fileReader.read(buffer)如果读取数量小于buffer的大小,那么length后面的也不会覆盖
for (int i = 0; i < length; i++) {
char c = buffer[i];
switch (c) {
//遇到'[',则说明刚开始读,不用处理。空格也不用处理。
case '[':
case ' ':
break;
//遇到','或者']',则说明已读完一个整数。临时串加入list,清空
case ',':
case ']':
//加入list
list.add(stringBuilder.toString());
//清空stringBuilder
stringBuilder.setLength(0);
break;
//其他情况,说明刚读完一个数字字符。加入临时串
default:
//加入stringBuilder
stringBuilder.append(c);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
System.out.println(list);
}
public static void main(String[] args) throws IOException {
data();
}
}
这里只是每个数字存为字符串,如果有其他需求,需要根据情况修改。
如有错误或其他问题欢迎指正。