String.substring vs String[].split

2022-09-02 11:33:01

我有一个逗号分层字符串,当调用它时返回大约60的数组大小。在特定用例中,我只需要获取将从数组返回的第二个值的值。例如,我想要的只是第一个之后和第二个之前的字符串的值。我对性能的问题是,我最好使用子字符串或使用拆分方法自己解析它,然后获取数组中的第二个值?任何意见将不胜感激。此方法每秒将被调用数百次,因此了解有关性能和内存分配的最佳方法非常重要。String.split(",")"Q,BAC,233,sdf,sdf,"','','

-邓肯


答案 1

由于返回 a ,使用 60 路将导致每行大约 60 个不必要的分配。 遍历整个字符串,并创建六十个新对象加上数组对象本身。在这六十一个对象中,你只保留一个,让垃圾回收器处理剩下的六十个。String.Splitstring[]SplitSplit

如果你在一个紧密循环中调用它,子字符串肯定会更有效:它通过字符串的部分直到第二个逗号,然后创建一个你保留的新对象。,

String s = "quick,brown,fox,jumps,over,the,lazy,dog";
int from = s.indexOf(',');
int to = s.indexOf(',', from+1);
String brown = s.substring(from+1, to);

以上印刷品 brown

当您多次运行此命令时,胜利将按时获胜:1,000,000次迭代需要3.36秒,而1,000,000次迭代只需要0.05秒。而字符串中只有八个组件!六十个组件的差异将更加巨大。substringsplitsubstring


答案 2

当然,为什么要遍历整个字符串,只需使用和substring()indexOf()