大家好,我是学生,还在学习C#。我需要解析具有以下格式的字符串:
< test, 1, 0, 1>
如何提取单词test
和数字1
,0
和1
,以将它们放入变量中,使其具有正确的数据类型?
我尝试将其转换为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);
}
答案 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)
这听起来像是一项作业/学习作业,我们不提供这些作业的代码。通常,这部分是学习经验必不可少的部分。我们能做的就是为您提供总体思路。
以这种格式解析字符串
对于此特定示例,正确的数据类型应为1个字符串,为3个整数。关于这一点,您没有什么可以概括的。 .NET在编译时被强类型化。尽管它具有互操作性,可用于弱类型的事物(例如与XML WebServices的交互),但它们无疑是先进的。
相对而言,拆分字符串是问题的难点。我至少可以想到以下解决方案:
string[]
的一个元素中来手动进行拆分。由于<>是标记的一部分,因此CSV解析器和REGEX似乎是最可能使用的工具。但这确实取决于您之前学到的知识。通常,这些任务可以增强您以前的能力。