【问题标题】:Remove substring from a string, split the result and store it in an array从字符串中删除子字符串,拆分结果并将其存储在数组中
【发布时间】:2013-04-06 14:04:55
【问题描述】:

我的代码是:

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

【问题讨论】:

  • 应该可以。你能显示以下代码行吗? “显示为空”是什么意思,在哪里?
  • 之后没有代码行。所有需要的代码都是这样的。调用它的代码完美地将字符串值传递给它。
  • 如果您担心性能问题,调用字符串拆分并不是非常有效。为什么你现在担心优化这一步呢?你没有提供这方面的背景......似乎过早的优化。
  • @SMT 看到我编辑的问题。实际上有这种类型的数据包含一些字段和值。我的任务是编译并将它们存储在内存中。数据是无序的。这意味着一个字段没有预定义的值。

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


【解决方案1】:

使用 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”

【讨论】:

  • 你说调用这个后val是null??? data 变量中的字符串是什么?
  • 我知道我们的两个代码都是正确的。但我不知道他们为什么不工作?
  • 好的,怎么样 - 创建一个全新的 Visual Studio 项目。只需添加此代码...检查它现在是否有效 - 无论问题是什么,首先检查它是否可能是现有代码中其他地方的问题。
【解决方案2】:
string[] val = data.Remove(0, data.IndexOf(' ') + 1).Split(' ');

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 2020-09-06
      • 2011-12-24
      相关资源
      最近更新 更多