[英]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.