从字符串中的每个单词获取第一个char的最短方法

我想要一个最简单的方法来获取C#中字符串中每个单词的第一个字符。

我所做的是:

string str = "This is my style"; string [] output = str.Split(' '); foreach(string s in output) { Console.Write(s[0]+" "); } // Output T ims 

我想以最短的方式显示相同的输出…

谢谢

 string str = "This is my style"; str.Split(' ').ToList().ForEach(i => Console.Write(i[0] + " ")); 
 var firstChars = str.Split(' ').Select(s => s[0]); 

如果表现至关重要:

 var firstChars = str.Where((ch, index) => ch != ' ' && (index == 0 || str[index - 1] == ' ')); 

第二种解决方案可读性较差,但循环一次。

我认为您的解决方案非常好,但如果您想获得更好的性能,可以尝试:

 string str = "This is my style"; Console.Write(str[0]); for(int i = 1; i < str.Length; i++) { if(str[i-1] = " ") Console.Write(" " + str[i]); } 

使用此代码可能会获得较低的常数因子,但它仍然以O(n)运行。 此外,我假设一行中永远不会有多个空格,并且它不会以空格开头。

如果您想编写更少的代码,可以尝试:

 str result = str.Split(" ").Select(y => y[0]).ToList(); 

或者其他的东西。

正则表达式可能是答案:

  Regex.Matches(text, @"\b(\w{1})") .OfType() .Select(m => m.Groups[1].Value) .ToArray();