我以name:key:dataLength:data
的格式字符串,这些字符串通常可以链接在一起。例如"aNum:n:4:9879aBool:b:1:taString:s:2:Hi"
,它将映射到类似以下内容的对象:
{
aNum: 9879,
aBool: true,
aString: "Hi"
}
我有一种解析这种格式的字符串的方法,但是我不确定是否使用
substring
是处理字符串的最有效方法,是否有一种更有效的方式以这种方式处理字符串(反复斩首部分):Map<string, dynamic> fromString(String s){
Map<String, dynamic> _internal = new Map();
int start = 0;
while(start < s.length){
int end;
List<String> parts = new List<String>(); //0 is name, 1 is key, 2 is data length, 3 is data
for(var i = 0; i < 4; i++){
end = i < 3 ? s.indexOf(':') : num.parse(parts[2]);
parts[i] = s.substring(start, end);
start = i < 3 ? end + 1 : end;
}
var tranType = _tranTypesByKey[parts[1]]; //this is just a map to an object which has a function that can convert the data section of the string into an object
_internal[parts[0]] = tranType._fromStr(parts[3]);
}
return _internal;
}
最佳答案
我会尝试s.split(':')
并处理结果列表。
如果您进行了大量此类操作,则应考虑创建基准测试,尝试不同的技术并进行比较。
如果您仍然需要此行
s = i < 3 ? s.substring(idx + 1) : s.substring(idx);
我会避免在每次迭代中创建一个新的子字符串,而只是跟踪
next
的位置。
关于string - Dart 高效的字符串处理技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068373/