You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Humanizr.net中添加忽略词/缩写,实现自定义句子大小写转换

实现Humanizr.net保留指定文本格式的解决方案

好问题!Humanizr.net提供了灵活的自定义配置能力,完全可以实现让特定内容(比如你示例中的"aBC")保持原有格式,不受句子大小写转换的影响。下面给你两种实用的实现方式:

方法一:自定义Humanize设置(快速实现)

你可以通过Humanize方法的重载,传入自定义的IHumanizeSettings来控制单词的处理逻辑,核心是利用WordFormatter委托来拦截并保留指定的词。

示例代码如下:

// 定义需要保留原格式的词集合
var preserveWords = new HashSet<string> { "aBC" };

// 创建自定义Humanize配置
var customSettings = new HumanizeSettings
{
    // 基础转换规则:句子大小写
    Transform = To.SentenceCase,
    // 自定义单词处理逻辑
    WordFormatter = (word) => 
    {
        // 如果当前单词是需要保留的词,直接返回原内容
        if (preserveWords.Contains(word))
        {
            return word;
        }
        // 其他单词按照正常逻辑转小写(配合句子首字母大写)
        return word.Humanize(To.LowerCase);
    }
};

// 测试你的字符串集合
List<string> mystrings = new List<string>();
mystrings.Add("my string one");
mystrings.Add("my string two aBC");
mystrings.Add("My String Three");

foreach (string x in mystrings)
{
    Console.WriteLine(x.Humanize(customSettings));
}

运行这段代码后,你会得到期望的输出:

My string one
My string two aBC
My string three

扩展:支持大小写不敏感匹配

如果需要匹配的词不区分大小写(比如不管输入是"aBC"、"ABC"还是"abc"都要保留原格式),可以修改HashSet的初始化方式:

// 初始化时指定忽略大小写的比较器
var preserveWords = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "abc" };

这样不管原字符串中的目标词是什么大小写形式,都会被识别并保留原格式。

方法二:全局自定义Humanizer实例(适合大型项目)

如果你的项目中需要全局统一应用这个规则,可以自定义IHumanizer实例并注册到依赖注入容器中(如果使用DI的话),这样所有地方调用Humanize都会自动应用规则。示例代码大致如下:

// 创建自定义Humanizer配置
var config = new HumanizerConfiguration();
config.WordFormatter = (word) => 
{
    var preserveWords = new HashSet<string> { "aBC" };
    return preserveWords.Contains(word) ? word : word.Humanize(To.LowerCase);
};
config.DefaultTransform = To.SentenceCase;

// 创建自定义IHumanizer实例
var customHumanizer = new Humanizer(config);

// 注册到DI容器(以ASP.NET Core为例)
services.AddSingleton<IHumanizer>(customHumanizer);

之后在项目中通过依赖注入获取IHumanizer实例,调用其Humanize方法即可自动应用规则。

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

火山引擎 最新活动