簡體   English   中英

從字符串中的每個單詞中獲取第一個字符的最短方法

[英]shortest way to get first char from every word in a string

我想要一種最短的方法來獲取 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

我想以最短的方式顯示相同的輸出......

謝謝

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"; 
str.Split(' ').ToList().ForEach(i => Console.Write(i[0] + " "));

正則表達式可能是答案:

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

打印字符串中每個單詞的第一個字母

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

輸出:

SOC

我認為您的解決方案非常好,但如果您想要更好的性能,您可以嘗試:

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();

或者其他的東西。

對我來說,這比其他人工作得更好,而且仍然非常靈活:

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

我使用 LukeH 考慮與列表一起工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM