You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ToTitleCase()方法处理特殊字符异常,如何修正以符合预期结果?

解决ToTitleCase处理特殊字符后意外大写的问题

这个问题的根源在于TextInfo.ToTitleCase的默认行为:它会把非字母数字字符视为单词分隔符,所以^后面的s会被当成新单词的首字母,自动转为大写。要实现你想要的效果(只有空白分隔的单词首字母大写,特殊字符后的字母保持小写),可以用以下两种方案:

方案一:正则表达式精确控制大写位置

先把整个字符串转成小写,然后用正则只对字符串开头或空白字符之后的字母进行大写处理,其他位置的字母保持小写:

using System.Text.RegularExpressions;

string textToConvert = "TEST^S CHECK";
string lowerText = textToConvert.ToLower();
// 匹配字符串开头或空白后的小写字母,替换为大写
string result = Regex.Replace(lowerText, @"(^|\s)[a-z]", match => match.Value.ToUpper());
// 输出结果:Test^s Check

正则表达式(^|\s)[a-z]的含义:

  • (^|\s):匹配字符串的起始位置,或者任意空白字符
  • [a-z]:匹配紧随其后的小写字母
  • 替换逻辑:将匹配到的这部分(比如开头的t,或者空格后的c)转为大写,其他字符保持小写

方案二:按空白分割单词手动处理

如果你觉得正则不够直观,可以按空白字符分割字符串,对每个单词单独处理(首字母大写,其余字母小写),最后再拼接回去:

string textToConvert = "TEST^S CHECK";
// 按空白分割成单词数组
string[] words = textToConvert.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
List<string> processedWords = new();

foreach (string word in words)
{
    if (string.IsNullOrWhiteSpace(word)) continue;
    // 首字母大写,剩余部分转小写
    string processedWord = char.ToUpper(word[0]) + word.Substring(1).ToLower();
    processedWords.Add(processedWord);
}

string result = string.Join(" ", processedWords);
// 输出结果:Test^s Check

这种方法的优势是逻辑更清晰,你可以很容易地扩展处理其他特殊情况(比如多个连续空白、特殊字符在单词开头等)。

内容的提问来源于stack exchange,提问作者user2081126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:53:28