在C#中解析字符串并将其放入变量

时间:2019-08-31 11:36:28

标签: c# arrays string parsing char

大家好,我是学生,还在学习C#。我需要解析具有以下格式的字符串:

< test, 1, 0, 1>

如何提取单词test和数字101,以将它们放入变量中,使其具有正确的数据类型?

我尝试将其转换为string,然后使用Substring()IndexOf()Split(),但没有一个起作用。

//this is what i did in c but i cant do it in c#
void parseData() {      // split the data into its parts

    char * strtokIndx; // this is used by strtok() as an index

    strtokIndx = strtok(tempChars,",");      // get the first part - the string
    strcpy(messageFromPC, strtokIndx); // copy it to messageFromPC

    strtokIndx = strtok(NULL, ","); // this continues where the previous call left off
    com1 = atoi(strtokIndx);     // convert this part to an integer

    strtokIndx = strtok(NULL, ",");
    com2 = atoi(strtokIndx);     

    strtokIndx = strtok(NULL, ","); 
    com3 = atoi(strtokIndx);     

    //strtokIndx = strtok(NULL, ",");
    //com4 = atof(strtokIndx);     
}

2 个答案:

答案 0 :(得分:1)

对于逗号分隔的字符串,可以使用string.Split()

string input = "<test, 1, 0, 1>";

// first remove the < and >
string inputWithoutBrackets = input.TrimStart('<').TrimEnd('>');

// split the string at the commas
string[] parts = inputWithoutBrackets.Split(',');

string messageFromPC = parts[0].Trim(); // use Trim to get rid of whitespaces
int com1 = int.Parse(parts[1].Trim());
int com2 = int.Parse(parts[2].Trim());
int com3 = int.Parse(parts[3].Trim());

请确保添加错误处理(如果字符串没有足够的parts,条目少于4个。如果没有可解析的数字,int.Parse可能会引发异常)。


有关C#中字符串的说明:它们是不可变引用类型。因此,对字符串的每个操作都会返回一个 new 字符串,而不是操作当前实例。例如。 Trim不会修剪当前实例,但是返回修剪后的字符串。

答案 1 :(得分:0)

这听起来像是一项作业/学习作业,我们不提供这些作业的代码。通常,这部分是学习经验必不可少的部分。我们能做的就是为您提供总体思路。

以这种格式解析字符串。如何提取单词“ test”,“ 1”,“ 0”,“ 1”

对于此特定示例,正确的数据类型应为1个字符串,为3个整数。关于这一点,您没有什么可以概括的。 .NET在编译时被强类型化。尽管它具有互操作性,可用于弱类型的事物(例如与XML WebServices的交互),但它们无疑是先进的。

相对而言,拆分字符串是问题的难点。我至少可以想到以下解决方案:

  • string.Split(“,”),切掉任何前导和尾随的“ <”,“>”和“”
  • 为此使用CSV解析器(特别是如果这不是唯一的行的话)
  • 使用正则表达式(REGEX)
  • 通过for循环手动遍历字符并将每个字符存储到string[]的一个元素中来手动进行拆分。

由于<>是标记的一部分,因此CSV解析器和REGEX似乎是最可能使用的工具。但这确实取决于您之前学到的知识。通常,这些任务可以增强您以前的能力。