拆分方法与子串和IndexOf

时间:2016-02-14 03:54:47

标签: java parsing csv

所以我正在编写一个解析CSV的程序。我正在使用split方法将值分隔为字符串数组,但我在一些文章中读到使用substring和indexOf更快。我写的基本上是用这两种方法做的,看起来拆分会更好。有人可以解释这是如何更好,或者如果我可能没有正确使用这些方法?这是我写的:

int indexOne = 0, indexTwo;
for (int i = 0; i < 4; i++) //there's four diff values in one line
{
   if (line.indexOf(",", indexOne) != -1)
   {
       indexTwo = line.indexOf(",", indexOne);
       lineArr[i] = line.substring(indexOne, indexTwo);
       indexOne = indexTwo+1;
   }
}

1 个答案:

答案 0 :(得分:1)

以下代码取自Oracles JDK 8更新73附带的源代码。正如您在&#34; fastpath&#34;中看到的那样。当您传入一个char字符串时,它会使用与您的逻辑类似的indexOf进入循环。

简短的回答是肯定的,您的代码速度要快一些,但我会留给您,以确定这是否足以避免在您的用例中使用拆分。

就个人而言,我倾向于同意@pczeus评论使用拆分,除非你确实有证据表明它引起了问题。

private static final String DATABASE_CREATE = "CREATE TABLE " + PEER_TABLE + " ("
        + PeerContract._ID    + " INTEGER PRIMARY KEY, "
        + PeerContract.NAME + " TEXT NOT NULL, "
        + PeerContract.ADDRESS  + " TEXT NOT NULL, "
        + PeerContract.PORT + " TEXT NOT NULL);";

private static final String MESSAGE_TABLE_CREATE = "CREATE TABLE " + MESSAGE_TABLE + " ("
        + MessageContract._ID + " INTEGER PRIMARY KEY, "
        + MessageContract.MESSAGE_TEXT  + " TEXT NOT NULL, "
        + MessageContract.SENDER + " TEXT NOT NULL, "
        + MessageContract.PEER_FOREIGN_KEY + " INTEGER NOT NULL, "
        + "FOREIGN KEY ("+ MessageContract.PEER_FOREIGN_KEY+") " +
        "REFERENCES "+PEER_TABLE+"("+PeerContract._ID+") ON DELETE CASCADE);";
private static final String CREATE_INDEX =  "CREATE INDEX " + INDEX + " ON " +
        MESSAGE_TABLE + "(" + MessageContract.PEER_FOREIGN_KEY + ");";
相关问题