使用特定条件将字符串拆分为多个字符串

时间:2017-12-28 18:03:41

标签: c# string split

我想根据以下条件将字符串拆分为多个字符串:

  • 必须至少2个单词
  • 每个单词必须彼此相邻

例如: “你好,你好吗?”我想分成:

  • “你好,你好吗”
  • “你好,怎么样”
  • “你好怎么样”
  • “怎么样”
  • “你好吗”
  • “是你”

不能重复多次。

到目前为止我得到的是:

string input = "hello how are you";
List<string> words = input.Split(' ').ToList();
List<string> inputs = new List<string>();

string temp = String.Empty;

for (int i = 0; i < words.Count; i++)
{
    temp += words[i] + " ";
    if (i > 0)
    {
        inputs.Add(temp);
    }
}

输出以下内容:

hello how 
hello how are 
hello how are you 

我也希望得到其他人,并需要一些帮助。

2 个答案:

答案 0 :(得分:5)

一种方法是迭代每个单词并获得所有可能的序列。

示例:

string input = "hello how are you";
List<string> words = input.Split(' ').ToList();
List<string> inputs = new List<string>();

for (int i = 0; i < words.Count; i++)
{
    var temp = words[i];
    for(int j = i+1;j < words.Count;j++) {
        temp += " " + words[j];
        inputs.Add(temp);
    }
}
//hello how 
//hello how are 
//hello how are you 
//how are 
//how are you 
//are you 

答案 1 :(得分:2)

这里是伪代码

for (int i = 0; i < words.Count - 1; i++)
{
    for each (int j = i + 1; j < words.Count; j++)
    {
        //rebuild string from words[i] through words[j] and add to list
    }
}

这个想法是将除了最后一个词之外的每个词都视为一个起始词(因为它不能跟随它的词)。对于起始单词,请考虑每个可能的结束单词(第一个是列表中的下一个单词,最后一个单词是最后一个单词)。然后对于每个开始/结束单词对,从中间的所有单词重建字符串,并将其添加到列表中