从字符串中删除子字符串,拆分结果并将其存储在数组中
本文关键字:字符串 存储 数组 拆分 删除 结果 | 更新日期: 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();