繁体   English   中英

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

[英]Remove substring from a string, split the result and store it in an array

我的代码是:

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答案,因为重新启动或重新创建项目的建议来自他。

使用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将具有“ durations”,而val将具有由16个元素组成的数组,每个元素的值为“ 24”

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

我假设它的val不会显示为null但第一个单词为空,因为您已从字符串中删除了第一个单词的子字符串,但尚未删除分隔符(空格)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM