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

本文关键字:字符串 存储 数组 拆分 删除 结果 | 更新日期: 2023-09-27 18:08:02

我的代码是:
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总是显示null。谁能告诉我该怎么办?我可以使用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的答案,因为重新启动或重新创建项目的建议来自他。

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

使用LINQ的跳过()

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将有"duration ", val将有一个包含16个元素的数组,每个元素的值为"24"

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

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

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

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