虽然很早就有写博客的打算,但时至今日才真正意义上开始。影响我写博客主要是有三件事吧,第一件就是以后面试时候可能不仅仅看你简历写什么而是看你博客和github上有什么;第二件是上家架构和我们说一项技术不是你学会如何使用而是教会别人怎么去使用;最后一件是新手应该多和别人交流,在错误中成长。这才是我写博客的主要原因。
前记
由于对上海有着蜜汁向往,在考虑了好几月之后我决定裸辞来到了上海。因为看房、找工作等一些系列操作下明显感觉已经花钱如流水,迫于生活和压力还没有工作的我就只能写日记、记账、学习。为什么没有采用EXECL记录开销是因为每天开销都不固定,无法简单采用交通、早午晚餐、其他这几列来处理,还有EXECL填入单元格数据还得先计算再填入(才不是当初没有第一时间想到EXECL)。
方式一:采用传统方式——数组
对于每天开销用一个数组进行进行存放数据,只要计算求和即可算的开销总和。
System.arraycopy()方法只能将两个数组整合放入一个数组中,所以我们需要新写一个方法将多个数组整合。
private <T> T[] concatAll(T[] first, T[]... rest) {
int totalLength = first.length;
for (T[] array : rest) {
totalLength += array.length;
}
T[] result = Arrays.copyOf(first, totalLength);
int offset = first.length;
for (T[] array : rest) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
方式二:采用读取Txt方式——IO流
以上数组存放数据存在问题就是所需创建数据对象是很多的,而且在整合时候也要一个个去整合,所以我就采用IO流读取数据再整合的方式。
private double handleTxt(String filename){
// 读取文件
BufferedReader br = null;
StringBuffer sb = null;
String line ;
// 存放每天开支数据
List<Double> lineMoneyLinkedList = new LinkedList<Double>();
// 读取数据
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(filename)));
while ((line = br.readLine()) != null) {
String regex = ".*[0-9].*";
Boolean flag = false;
// 判断每行是否含有数字
if(line.matches(regex)){
flag = true ;
}
// 每行按需求提取读出数据
if(flag){
Stream.of(line.split(",")).forEach(lineSplit -> {
Double numData = Double.parseDouble(lineSplit.replaceAll("[^\\d.]", ""));
if(!"".equals(numData)){
lineMoneyLinkedList.add(numData);
}
});
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 总开销
double numDataTotal = lineMoneyLinkedList.stream().collect(Collectors.summarizingDouble(value -> value)).getSum();
return numDataTotal;
}
如果没有判断每行是否存在数字,那么如果文件中是以下这样存在会出现空指针异常。
这是第一次写博客并且技术很浅,如果存在哪些问题或者存在哪些可以有优化的望不吝赐教。