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

时间:2011-01-17 13:04:19

标签: c# string split

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

我所做的是:

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

// Output
T i m s

我希望以最短的方式显示相同的输出...

由于

7 个答案:

答案 0 :(得分:15)

var firstChars = str.Split(' ').Select(s => s[0]);

如果表现至关重要:

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

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

答案 1 :(得分:11)

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

答案 2 :(得分: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();

或其他什么。

答案 3 :(得分:0)

正则表达式可能就是答案:

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

答案 4 :(得分:0)

打印字符串中每个单词的第一个字母

string SampleText = "Stack Overflow Com";
string ShortName = "";
SystemName.Split(' ').ToList().ForEach(i => ShortName += i[0].ToString());  

输出:

SOC

答案 5 :(得分:0)

对我来说,这比其他的效果更好,而且仍然非常灵活:

string.Join("", str.Split(" ").Select(x => x[0]).ToArray())

答案 6 :(得分:0)

我使用 LukeH 考虑来处理列表。

            List<string> output = new List<string>();
            Array.ForEach(str.Split(' ', StringSplitOptions.RemoveEmptyEntries), s => output.Add(s));