C# 除了任何单词的第一个字母外,如何将字符串中任何两个字母的单词大写?

C# 除了任何单词的第一个字母外,如何将字符串中任何两个字母的单词大写?,c#,C#,我需要将字符串中每个单词的第一个字母大写,如果单词的长度是两个,还需要将字符串中的两个字母大写 输入示例: dr. david BOWIE md 示例输出: Dr. David Bowie MD 我一开始是这样的: TextInfo tCase = new CultureInfo("en-US", false).TextInfo; return tCase.ToTitleCase(input.ToLower()); 不知道如何完成此操作。您可以尝试使用拆分和加入: var input =

我需要将字符串中每个单词的第一个字母大写,如果单词的长度是两个,还需要将字符串中的两个字母大写

输入示例:

dr. david BOWIE md
示例输出:

Dr. David Bowie MD
我一开始是这样的:

TextInfo tCase = new CultureInfo("en-US", false).TextInfo;
return tCase.ToTitleCase(input.ToLower());

不知道如何完成此操作。

您可以尝试使用
拆分
加入

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));
输出:

Dr. David Bowie MD
大卫·鲍伊博士

您可以这样做:

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);
产出:

大卫·鲍伊博士

String s=“david BOWIE博士”;
s=转换酶(s);
公共字符串ConvertToMyCase(字符串s)
{
s=System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(s.toLower());
List my=新列表();
字符串[]分隔符=新字符串[]{“,”,“,”,“!”,“\',”,“\'s”};
foreach(s.Split中的字符串字(分隔符、StringSplitOptions.RemoveEmptyEntries))
{
if(word.Length==2)
{
word.ToUpper();
}
}
返回s;
}

我将使用正则表达式将您的解决方案扩展为一个线性解决方案:

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

如果名字的一部分只有两个字母,那怎么办?非常正确,我没想到。那太糟糕了。我想我可以为需要转换为大写的指定字符串添加特定的称呼。谢谢你指出这一点。
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