我想将字符串拆分为2个字符串集。例如,
string str = "I want to split the string into 2 words"
输出应该是这样的:
1: "I want"
2: "want to"
3: "to split"
4: "split the"
5: "the string"
6: "string into"
7: "into 2"
8: "2 words"
这样做的最佳方法是什么?
我试过这种方式,
var pairs = textBox1.Text.Split(' ')
.Select((s, i) => new { s, i })
.GroupBy(n => n.i / 2)
.Select(g => string.Join(" ", g.Select(p => p.s)))
.ToList();
但它不起作用。我得到了以下字符串集。
1: "I want"
2: "to split"
3: "the string"
4: "into 2"
5: "words"
但这不是我要找的。 我怎样才能做到这一点?任何帮助将非常感激。感谢。
答案 0 :(得分:3)
如何使用空格分割,迭代到最后一项,并将两个带格式的项目放入该列表?
string str = "I want to split the string into 2 words";
var array = str.Split(' ');
var list = new List<string>();
for (int i = 0; i < array.Length - 1; i++)
{
list.Add(string.Format("{0} {1}", array[i], array[i + 1]));
}
答案 1 :(得分:2)
首先,正如您所做的那样,按空格分割每个单词,如下所示:
String[] words = str.Split(' ')
现在,只需遍历此数组并将每对字符串连接成一个新数组。
String[] pairs = new String[words.Length - 1];
for (int i = 0; i+1 < words.length; i++)
{
pairs[i] = string.Format("{0} {1}", words[i], words[i+1]);
}
这段代码可能在语法上不正确,但这个想法会起作用!
答案 2 :(得分:1)
我只想分享正则表达式方法:
var s = "I want to split the string into 2 words";
var result = Regex.Matches(s, @"(\w+)(?=\W+(\w+))")
.Cast<Match>()
.Select(p => string.Format("{0} {1}", p.Groups[1].Value, p.Groups[2].Value))
.ToList();
请参阅IDEONE demo
使用(\w+)(?=\W+(\w+))
regex,我们确保捕获一个单词((\w+)
),然后捕获下一个单词,但不要使用前瞻((?=\W+(\w+))
) (使用(\w+)
)但省略非单词字符(\W+
)。然后我们加入Select
中的2个单词。