这是我如何编写一个函数来制作Java风格的首字母缩略词:
string makeAcronym(string str)
{
string result = "";
for (int i = 0; i < str.Length; i++)
{
if (i == 0 && str[i].ToString() != " ")
{
result += str[i];
continue;
}
if (str[i - 1].ToString() == " " && str[i].ToString() != " ")
{
result += str[i];
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方式我可以使用LINQ,或使用一些内置的C#函数?
Ree*_*sey 13
这里有几个选项
使用string.Join的仅.NET 4选项:
string acronym = string.Join(string.Empty,
input.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries).Select(s => s[0])
);
Run Code Online (Sandbox Code Playgroud)
在.NET 3.5(或4.0)中,您可以执行以下操作:
string acronym = new string(input.Split(new[] {' '},
stringSplitOptions.RemoveEmptyEntries).Select(s => s[0]).ToArray());
Run Code Online (Sandbox Code Playgroud)
另一种选择(我的个人选择),基于您的原始逻辑:
string acronym = new string(
input.Where( (c,i) => c != ' ' && (i == 0 || input[i-1] == ' ') )
.ToArray()
);
Run Code Online (Sandbox Code Playgroud)
这是迄今为止我还没有看到的一种技术.它取决于假设所有字母应该在首字母缩略词中(并且只有那些字母)在字符串中是大写的.
string MakeAcronym(string input)
{
var chars = input.Where(Char.IsUpper).ToArray();
return new String(chars);
}
// MakeAcronym("Transmission Control Protocol") == "TCP"
Run Code Online (Sandbox Code Playgroud)
你可以使用Regex/Linq组合很好地做到这一点:
String
.Join("",
Regex
.Matches("this is a test",@"(?<=^| )\w")
.Cast<Match>()
.Select(m=>m.Value)
.ToArray()
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4253 次 |
| 最近记录: |