Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String dart高效字符串处理技术?_String_Dart - Fatal编程技术网

String dart高效字符串处理技术?

String dart高效字符串处理技术?,string,dart,String,Dart,I字符串的格式为name:key:dataLength:data,这些字符串通常可以链接在一起。例如“aNum:n:4:9879aBool:b:1:taString:s:2:Hi”这将映射到如下对象: { aNum:9879, 是的, 阿斯汀:“嗨” } 我有一种方法可以解析这种格式的字符串,但我不确定是否使用子字符串是处理字符串的最有效方法,是否有更有效的方法以这种方式处理字符串(反复切掉前面的部分): Map fromString(字符串s){ 映射_internal=新映射(); int

I字符串的格式为
name:key:dataLength:data
,这些字符串通常可以链接在一起。例如
“aNum:n:4:9879aBool:b:1:taString:s:2:Hi”
这将映射到如下对象:

{
aNum:9879,
是的,
阿斯汀:“嗨”
}
我有一种方法可以解析这种格式的字符串,但我不确定是否使用
子字符串
是处理字符串的最有效方法,是否有更有效的方法以这种方式处理字符串(反复切掉前面的部分):

Map fromString(字符串s){
映射_internal=新映射();
int start=0;
while(开始
我会尝试
s.split(“:”)
并处理结果列表。 如果你做了很多这样的操作,你应该考虑创建基准测试,尝试不同的技术并比较它们。

如果你还需要这条线

s=i<3?s、 子串(idx+1):s.子串(idx);
我会避免在每次迭代中创建新的子字符串,而只是跟踪下一个位置。

您必须确定性能相对于代码的可读性和可维护性有多重要

这就是说,你不应该反复切断绳子的头部。这肯定是低效的——只需创建那些尾部字符串,所需的时间是字符串中记录数的二次方

对于解析每个字段,可以避免对长度和类型字段执行子字符串。对于长度字段,您可以自己生成数字:

int索引=。。。;
//索引指向长度的第一个数字。
整数长度=0;
int charCode=source.codeunit(index++);
while(charCode!=CHAR\u冒号){
长度=10*length+charCode-0x30;
charCode=source.codeunit(index++);
}
//索引指向内容的第一个字符。

因为长度通常是小整数(少于2)请提供有关此类字符串的预期大小或一次要处理多少此类字符串的信息。这取决于大量此类信息—什么策略有意义,或者投资时间进行优化是否有意义。字符串的数据部分在大小和内容方面完全可以是任何内容这些对象的链接也可能是巨大的,我不希望它们是我个人的原因,因为使用它们只会使用SMAL简单对象,但是类应该支持具有任意数量属性的对象。然后,您也可以考虑使用流进行异步处理,并用A进行解析,这样就不需要MO了。您可以同时在内存中创建多个副本。您也可以在数据仍在接收时开始处理数据。对于小数据块可能会较慢,但对于大数据可能会较快。另请参见为什么不使用json或ProtocolBuffers以及现有的解析器?(当然,只有在您可以决定编码数据使用哪种格式的情况下)我没有使用
split(“:”)的唯一原因
是因为我不能保证字符串的数据部分不会包含
,所以我最终会将这些位重新连接起来。关于跟踪下一个位置而不是重复覆盖原始字符串的好提示。我明白了。您的分隔符是
:x:y:
其中
x
是somE类型信息和<代码> y>代码>是字段标识符。您可以尝试ReGEX用于此。我听说DART正则表达式不是很快,但我会考虑和TimMar。谢谢。