解析和操作字符串的有效方法

时间:2013-01-27 13:27:23

标签: java android arrays string split

我不确定我是否使用有效的方法来操纵大量的字符串。 我需要打开一个大文件(~35kb)并解析和操作每一行,例如:

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

我需要将每个Name姓氏插入到sqlite db中,并将当前id作为索引。

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 个答案:

答案 0 :(得分:0)

[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();
                }
            }

如果这是我做的更好的解决方案或改进,请告诉我。