如何根据条件将数组中的一个项目拆分为两个项目?

3

I have an example above.

Have array like:

array[0] = TODO 06:15PMJoin Michael
array[1] = WakeUp
array[2] = Going to schools

我希望您能将其变成这样:

我希望它成为:

array[0] = TODO 06:15PM
array[1] = Join Michael
array[2] = WakeUp
array[3] = Going to schools

在这个例子中,我把内容为TODO 06:15PMJoin Michael的项拆分成了两个新项。
这里有两个不同的问题:
如何创建一个数组中创建新项的角色?
我尝试使用我的代码: var splitList = words.SelectMany(x => x.Contains("AM") || x.Contains("PM")) 但我不知道如何从文本AMPM中拆分出新的arrays项。

也许可以使用子字符串来轻松完成这个任务? - Kason
当您知道所需字符串的长度时,可以使用SubString进行拆分。在我的情况下,array从IList<WebElement>获取值。数组[0]的值是随机的。它只有AMPM的角色。 - Ave
1
IndexOf可以帮助您找到索引。 - Kason
谢谢,@Kason。在你的提醒下我才想到使用 IndexOf - Ave
2个回答

5
您可以尝试查找AM/PM并获取子字符串:
  String[] array = new String[] {
    "TODO 06:15PMJoin Michael",
    "WakeUp",
    "Going to schools"
  };

  var result = array
    .SelectMany(line => {
        int p = line.IndexOf("AM");

        if (p >= 0)
          return new String[] { 
            line.Substring(0, p + "AM".Length), 
            line.Substring(p + "AM".Length) };

        p = line.IndexOf("PM");

        if (p >= 0)
          return new String[] { 
            line.Substring(0, p + "PM".Length), 
            line.Substring(p + "PM".Length) };

        return new String[] { line };
      }
    );
  //.ToArray(); // if you want to have array representation

  // Test
  Console.Write(String.Join(Environment.NewLine, result));

你太棒了。你的回答解决了我的问题。非常感谢你。 - Ave
我遇到了一个数组问题。我的数组是word[6],共有6个项目。我想要将words[0]分成两个项目并添加已存在的项目。代码words = Regex.Split(words[0], @"\s{1,}").Where(x => !string.IsNullOrEmpty(x)).ToArray();会删除已存在的项目并创建只有2个项目的新数组。 - Ave
1
@Văn Lộc:你走对了路,只需要使用SelectManywords = words.SelectMany(item => Regex.Split(item, @"\s{1,}")).Where(x => !string.IsNullOrEmpty(x)).ToArray(); - Dmitry Bychenko

1
你也可以尝试这个:

string[] array = new string[] {"TODO 06:15PMJoin Michael", 
    "WakeUp", 
    "Going to schools"};

string[] SplitArray(string[] array)
{
    List<string> returnArray = new List<string>();

    foreach (string item in array)
    {
        int index = GetIndex(item);
        if (index >= 0)
        {
            string s1 = item.Substring(0, index + 2);
            string s2 = item.Substring(index + 2);
            returnArray.Add(s1);
            returnArray.Add(s2);
        }
        else
        {
            returnArray.Add(item);
        }
    }

    return returnArray.ToArray();
}

int GetIndex(string s)
{
    int index = GetIndexOf(s, "AM");

    if (index == -1)
    {
        index = GetIndexOf(s, "PM");
    }

    return index;
}

int GetIndexOf(string s, string delim)
{
    int index = -1;

    int tempIndex = 0;
    do
    {
        tempIndex = s.IndexOf(delim, tempIndex);
        if (tempIndex > 0)
        {
            if (char.IsDigit(s[tempIndex-1]))
            {
                index = tempIndex;
                break;
            }
        }
    }
    while(tempIndex >= 0);

    return index;
}

我不测试你的代码。但是看起来你也回答正确了。 - Ave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接