所以我正在编写一个解析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;
}
}
答案 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 + ");";