从字符串中获取各种变量的最有效方法

时间:2011-03-01 20:42:40

标签: c# string

我目前正在研究远程控制软件。该单元提供以下字符串(没有任何换行符或其他内容):

...some_general_infomations,param1=value1,param2=value2,param3=value3,paramN=valueN,...  

我需要以某种方式将这些值分配给某些变量。由于这个字符串的长度是变化的,我不能使用子串(如果我错了,请纠正我)。

最有效(也是最快)的方式是什么?

编辑: @ Darin的解决方案适用于大多数消息,但这里的这个非常棘手:

CFG=0<\r><\n>BOU=0<\r><\n>ALA:D1=132,D2=0,D3=0<\r><\n>COD1:S=13<\r><\n>-C1=5,N1=12345678,CLS=0,VAL=0<\r><\n>-C2=5,N2=,CLS=0,VAL=0<\r><\n>COD2:S=0<\r><\n>-C1=0,N1=,CLS=0,VAL=0<\r><\n>ENT:APPEL1=0,APPEL2=0<\r><\n>USI:DEP=0,AES=1,V8K=1,FIL=1,DSP=0,RSC=1,AL3=0,TDA=1,A64=0,CCS=0,RES=0,xxx=0,xxx=0,5AS=1<\r><\n>PERF:<\r><\n>-DMIN=0,0,<\r><\n>OK<\r><\n>

我至少需要获得S,C1,N1的值。即使我删除换行符,这些参数也可以用逗号或冒号分隔。 我怎么能处理这个字符串?

3 个答案:

答案 0 :(得分:4)

良好的分裂应该有效:

var input = "...some_general_infomations,param1=value1,param2=value2,paramN=valueN";
var tokens = input.Split(',');
if (tokens.Length > 0)
{
    foreach (var token in tokens)
    {
        var parts = token.Split('=');
        if (parts.Length > 1)
        {
            string paramName = parts[0];
            string paramValue = parts[1];
        }
    }
}

答案 1 :(得分:2)

使用字符串类的Split方法。

string[] pairs = words.Split(new Char [] {','});
foreach(string pair in pairs)
{
    string[] kv = pair.Split(new Char [] {'='});

    // kv[0] will hold the pair param name
    // kv[1] will hold the pair param value
}

代码中有几个假设 - 您只有,分隔的名称/值对,并且每对在名称和值之间都有=

答案 2 :(得分:1)

正则表达式是执行此操作的标准方法;像这样:

/,([^=]+)=([^,$]+)/