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

本文关键字:字符串 任何两 单词大 任何单 第一个 | 更新日期: 2023-09-27 17:55:30

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

示例输入:

dr. david BOWIE md

示例输出:

Dr. David Bowie MD

我从这样的事情开始:

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

不知道如何做到这一点。

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

你可以

试试这个,使用SplitJoin

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

输出:

大卫·鲍伊

博士 医学博士
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;
}
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

你可以这样做:

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 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