我有一个逗号分隔的字符串,当调用 String.split(",")
它返回一个大小约为 60 的数组。在特定用例中,我只需要获取将从数组返回的第二个值。因此,例如 "Q,BAC,233,sdf,sdf,"
我想要的只是第一个 ','
之后和第二个 之前的字符串的值>','
.我对性能的问题是我最好自己使用 substring 或使用 split 方法解析它,然后获取数组中的第二个值?任何输入将不胜感激。此方法每秒会被调用数百次,因此我了解有关性能和内存分配的最佳方法很重要。
-邓肯
最佳答案
由于 String.Split
返回一个 string[]
,使用 60 路 Split
将导致每行大约 60 个不必要的分配。 Split
遍历整个字符串,并创建 60 个新对象以及数组对象本身。在这 61 个对象中,您只保留一个,让垃圾收集器处理剩余的 60 个。
如果你在一个紧密的循环中调用它,一个子字符串肯定会更有效:它遍历你的字符串部分直到第二个逗号 ,
,然后创建一个新对象你留着。
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);
以上prints 棕色
当您多次运行此操作时,substring
会按时获胜:split
的 1,000,000 次迭代需要 3.36 秒,而 substring的 1,000,000 次迭代
只需要0.05s。字符串中只有八个组件!六十个组件的差异会更大。
关于java - String.substring 与 String[].split,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997361/