我需要将字符串中每个单词的第一个字母大写,并且如果单词的长度为2,则还要将字母大写为字符串。
示例输入:
dr. david BOWIE md
示例输出:
Dr. David Bowie MD
我开始使用这样的东西:
TextInfo tCase = new CultureInfo("en-US", false).TextInfo;
return tCase.ToTitleCase(input.ToLower());
不确定如何解决此问题。
答案 0 :(得分:2)
您可以尝试使用Split
和Join
:
var input = "dr. david BOWIE md";
TextInfo tCase = new CultureInfo("en-US", false).TextInfo;
var result = tCase.ToTitleCase(input.ToLower());
result = string.Join(" ", result.Split(' ')
.Select(i => i.Length == 2 ? i.ToUpperInvariant() : i));
输出:
博士。 David Bowie MD
答案 1 :(得分:0)
你可以这样做:
TextInfo tCase = new CultureInfo("en-US", false).TextInfo;
string s = "dr. david BOWIE md";
var ss = string.Join(" ", s.Split(' ').Select(u => u.Length == 2 ? u.ToUpper() : tCase.ToTitleCase(u.ToLower())).ToList());
Console.WriteLine(ss);
输出:
博士。 David Bowie MD
答案 2 :(得分:0)
String s = "dr. david BOWIE md";
s= ConvertToMyCase(s);
public string ConvertToMyCase(string s)
{
s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.toLower());
List<string> my = new List<string>();
string[] separators = new string[] {",", ".", "!", "\'", " ", "\'s"};
foreach (string word in s.Split(separators, StringSplitOptions.RemoveEmptyEntries))
{
if(word.Length == 2)
{
word.ToUpper();
}
}
return s;
}
答案 3 :(得分:0)
var str = "dr. david BOWIE md";
var strList = new List<string>();
str.Split(' ').ToList().ForEach(s =>
{
strList.Add(s.Length == 2 ? s.ToUpper() : string.Format("{0}{1}", char.ToUpper(s[0]), s.Substring(1).ToLower()));
});
var output = string.Join(" ", strList.ToArray());
Console.WriteLine(output);
输出:
Dr. David Bowie MD
答案 4 :(得分:0)
我会使用Regex将您的解决方案扩展到单线性解决方案:
string result = Regex.Replace(new CultureInfo("en-US", false).TextInfo.ToTitleCase(input.ToLower()), @"(?i)\b([a-z]{2})(?!.)\b", m => m.ToString().ToUpper());
Console.WriteLine(result);
输出:
Dr. David Bowie MD