java个人记账(非企业级应用)

虽然很早就有写博客的打算,但时至今日才真正意义上开始。影响我写博客主要是有三件事吧,第一件就是以后面试时候可能不仅仅看你简历写什么而是看你博客和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;
}

如果没有判断每行是否存在数字,那么如果文件中是以下这样存在会出现空指针异常。
在这里插入图片描述
在这里插入图片描述这是第一次写博客并且技术很浅,如果存在哪些问题或者存在哪些可以有优化的望不吝赐教。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java语言写的android系统,用于个人账目管理,课程设计上写的欢迎下载 package moneymanager.moneymanager; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; /* * * 데이터베이스를 관리하는 클래스입니다. * */ public class DBAdapter { private static final String TAG = "NotesDbAdapter"; private DatabaseHelper mDbHelper; private SQLiteDatabase mDb; // 데이터베이스이름과 테블이름들을 정의 private static final String DATABASE_NAME = "MoneyManagerDB"; private static final int DATABASE_VERSION = 2; private static final String DATABASE_SETTING_TABLE = "SettingTbl"; private static final String DATABASE_BADGET_TABLE = "BadgetTbl"; private static final String DATABASE_PAYMENT_TABLE = "PaymentTbl"; // 테블안의 항목들을 정의 public static final String KEY_SETTINGTBL_ID = "ID"; public static final String KEY_SETTINGTBL_NAME = "Name"; public static final String KEY_SETTINGTBL_VALUE = "Value"; public static final String KEY_BADGETTBL_ID = "ID"; public static final String KEY_BADGETTBL_ITEM = "Item"; public static final String KEY_BADGETTBL_MONEY = "Money"; public static final String KEY_PAYMENTTBL_ID = "ID"; public static final String KEY_PAYMENTTBL_BADGETID = "BadgetID"; public static final String KEY_PAYMENTTBL_OUTDATE = "OutDate"; public static final String KEY_PAYMENTTBL_MONEY = "Money"; public static final String KEY_PAYMENTTBL_NOTE = "Note"; private final Context mCtx; private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String strCreateTbl; // SettingTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_SETTING_TABLE + " (" + KEY_SETTINGTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_SETTINGTBL_NAME + " TEXT NOT NULL, " + KEY_SETTINGTBL_VALUE + " TEXT NOT NULL);"; db.execSQL(strCreateTbl); // BadgetTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_BADGET_TABLE + " (" + KEY_BADGETTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_BADGETTBL_ITEM + " TEXT NOT NULL, " + KEY_BADGETTBL_MONEY + " INTEGER NOT NULL);"; db.execSQL(strCreateTbl); // PaymentTbl생성 strCreateTbl = "CREATE TABLE " + DATABASE_PAYMENT_TABLE + " (" + KEY_PAYMENTTBL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_PAYMENTTBL_BADGETID + " INTEGER NOT NULL, " + KEY_PAYMENTTBL_OUTDATE + " TEXT NOT NULL, " + KEY_PAYMENTTBL_MONEY + " INTEGER NOT NULL, " + KEY_PAYMENTTBL_NOTE + " TEXT);"; db.execSQL(strCreateTbl); } ......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值