簡體   English   中英

解析和處理字符串的有效方法

[英]Efficient way to Parsing and manipulating string

我不確定我是否正在使用有效的方式來處理大量字符串。 我需要打開一個大文件(〜35kb)並解析和處理每一行,例如:

a1="Name surname"
a2="Name surname"
a3="Name surname"
...
a800="Name surname"

我需要將當前ID為索引的每個Name姓氏插入sqlite db。

while ((s = d.readLine()) != null){
                        String[] name = s.split("\"");

                        String[] arrIdTemp = s.split("=");
                        String[] arrtId = arrIdTemp[0].split("a");

                        db.execSQL("INSERT INTO " + Constant.DB.DB_NAME
                                + " Values ('" + arrtId[1] + "','" + name[1]
                                + "');");

                    }

這樣,我創建了3個字符串數組,前100行非常快,但是最后整個操作速度變慢了,也許是因為大量使用了內存嗎? 是否有更好的解決方案來拆分和操縱每一行?

Logcat的輸出顯示許多內容:

01-27 14:46:50.554: D/dalvikvm(2541): GC_CONCURRENT freed 1778K, 68% free 3606K/11079K, external 4662K/5822K, paused 4ms+7ms

[1°解決方案]

我將這兩個操作分開並使用事務。 從大約60秒開始,現在我只需要2-3秒。

這就是我所做的:

//List of query
ArrayList<String> queryList = new ArrayList<String>();
...
while ((s = d.readLine()) != null){
                        String[] name = s.split("\"");

                        String[] arrIdTemp = s.split("=");
                        String[] arrtId = arrIdTemp[0].split("a");

                        queryList.add("INSERT INTO " + Constant.DB.DB_NAME
                                + " Values ('" + arrtId[1] + "','" + name[1]
                                + "');");

                    }

...

if (queryList!=null && queryList.size()>0){
                Iterator<String> iter = queryList.iterator();
                db.beginTransaction();
                try {
                    while (iter.hasNext()) {
                         db.execSQL(iter.next());
                        }
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction();
                }
            }

如果這是我所做的更好的解決方案或改進,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM