加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 没有字符串拆分的解析

发布时间:2020-12-15 08:32:06 所属栏目:百科 来源:网络整理
导读:这是 some other question讨论的衍生产品. 假设我必须解析大量非常长的字符串.每个字符串包含由空格分隔的一系列双精度数(当然是文本表示形式).我需要将双精度解析为List double. 标准的解析技术(使用string.Split double.TryParse)似乎很慢:对于每个数字,
这是 some other question讨论的衍生产品.

假设我必须解析大量非常长的字符串.每个字符串包含由空格分隔的一系列双精度数(当然是文本表示形式).我需要将双精度解析为List< double>.

标准的解析技术(使用string.Split double.TryParse)似乎很慢:对于每个数字,我们需要分配一个字符串.

我试图使它成为旧C类的方式:计算包含数字的子串的开始和结束的索引,并在“就地”解析它,而不创建额外的字符串. (见下文http://ideone.com/Op6h0,相关部分.)

int startIdx,endIdx = 0;
while(true)
{
    startIdx = endIdx;
    // no find_first_not_of in C#
    while (startIdx < s.Length && s[startIdx] == ' ') startIdx++;
    if (startIdx == s.Length) break;
    endIdx = s.IndexOf(' ',startIdx);
    if (endIdx == -1) endIdx = s.Length;
    // how to extract a double here?
}

string.IndexOf有一个重载,只在给定的子字符串中搜索,但我找不到从子字符串解析double的方法,而没有先实际提取该子字符串.

有没有人有想法?

解决方法

没有托管API来解析子字符串中的double.我的猜测是,与double.Parse中的所有浮点运算相比,分配字符串将是无关紧要的.

无论如何,您可以通过创建长度为100的“缓冲区”字符串来保存分配,该字符串仅包含空格.然后,对于要解析的每个字符串,使用不安全的代码将字符复制到此缓冲区字符串中.用空格填充缓冲区字符串.对于解析,您可以使用NumberStyles.AllowTrailingWhite,这将导致尾随空格被忽略.

获取指向字符串的指针实际上是一个完全支持的操作:

string l_pos = new string(' ',100); //don't write to a shared string!
    unsafe 
    {
        fixed (char* l_pSrc = l_pos)
        {               
              // do some work
        }
    }

C#具有将字符串绑定到char *的特殊语法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读