从字符串中删除子字符串,拆分结果并将其存储在数组中

时间:2013-04-06 14:04:55

标签: c# arrays string c#-4.0 split

我的代码是:

public void processData(string data)
{
       string com = data.Split(' ')[0];
       string[] val = data.Remove(0,com.Length).Split(' ');
}

使用此代码我想要实现的是当com存储data变量中的第一个单词时,val数组应该存储data的剩余单词变量。在第4行代码中,我通过首先将字符从0索引移到第一个单词的长度来实现这一点。这将删除第一个单词,然后根据空格将其拆分,然后将结果存储在数组中。问题是这没有发生。 com存储第一个单词,但val始终显示为空。请有人告诉我该怎么办?我可以使用foreach循环或其他技术实现此目的。但由于性能问题,我不想要太多代码。

我的示例字符串是这样的:

begin main
timesteps 1750
weeks 250
campaigns 6
scenario 10
epsilon 0.01
powerplant1 11
powerplant2 10
constraint13 46
constraint14 7
constraint15 0
constraint16 1
constraint17 3
constraint18 0
constraint19 1
constraint20 1
constraint21 1
durations 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 

左侧有字段,右侧有值。我想分开存储它们。

示例:字段为timesteps,值为1750

解决方案:

这是非常愚蠢的解决方案,但我刚刚重新启动了我的Visual Studio,它工作正常。

感谢所有人的好评。我+1所有答案并标记Blachshma答案,因为重新启动或重新创建项目的建议来自他。

3 个答案:

答案 0 :(得分:4)

使用LINQ的 Skip()

string[] val = data.Split(' ').Skip(1).ToArray();

强调你的例子中的字符串:

string data = "timesteps 1750";
string com = data.Split(' ')[0]; // Returns timesteps
string[] val = data.Split(' ').Skip(1).ToArray(); // Returns 1750

您的另一个例子:

string data = "durations 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24";

com将有“持续时间”,val将包含16个元素的数组,每个元素的值为“24”

答案 1 :(得分:3)

string[] val = data.Remove(0, data.IndexOf(' ') + 1).Split(' ');

答案 2 :(得分:1)

我假设它val没有显示null但是第一个单词是空的,因为你已经从字符串中删除了第一个单词的子字符串,但是你没有删除分隔符(白色 - 空间)。

所以这应该有用(如果你只想删除第一个单词):

string[] val = data.Split().Skip(1).ToArray();