String.substring vs String[].split

前端 未结 5 1865
醉梦人生
醉梦人生 2021-01-17 09:24

I have a comma delaminated string that when calling String.split(\",\") it returns an array size of about 60. In a specific use case I only need to get the valu

5条回答
  •  执笔经年
    2021-01-17 10:13

    Since String.Split returns a string[], using a 60-way Split would result in about sixty needless allocations per line. Split goes through your entire string, and creates sixty new object plus the array object itself. Of these sixty one objects you keep exactly one, and let garbage collector deal with the remaining sixty.

    If you are calling this in a tight loop, a substring would definitely be more efficient: it goes through the portion of your string up to the second comma ,, and then creates one new object that you keep.

    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);
    

    The above prints brown

    When you run this multiple times, the substring wins on time hands down: 1,000,000 iterations of split take 3.36s, while 1,000,000 iterations of substring take only 0.05s. And that's with only eight components in the string! The difference for sixty components would be even more drastic.

提交回复
热议问题