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

如何将字符串首字符转为小写?含CamelCase场景处理求助

解决方案

你的核心需求是:对包含点号分隔的字符串,将每个分隔段的首字符转为小写,同时保留其余部分的驼峰结构(如stackOver.Flow → stackOver.flow、Hello.Word → hello.word)。原代码仅处理了整个字符串的首字符,未覆盖点号后的分段,以下是修改后的实现:

module Identifier =

    open System

    // 处理单个字符串段,保持原有驼峰转换逻辑的同时将段首转为小写
    let private processSegment (s: string) =
        if String.IsNullOrEmpty(s) then s
        else
            let isUpper = Char.IsUpper
            let n = s.Length
            let builder = new System.Text.StringBuilder()
            let append (s:string) = builder.Append(s) |> ignore
            let rec loop i j =
                let k = 
                    if i = n || (isUpper s.[i] && (not (isUpper s.[i - 1]) || ((i + 1) <> n && not (isUpper s.[i + 1])))) 
                        then
                        if j = 0 then
                            append (s.Substring(j, i - j).ToLower())
                        elif (i - j) > 2 then
                            append (s.Substring(j, 1))
                            append (s.Substring(j + 1, i - j - 1).ToLower())
                        else
                            append (s.Substring(j, i - j))
                        i
                    else
                        j
                if i = n then builder.ToString()
                else loop (i + 1) k
            loop 1 0

    let changeCase (str : string) =
        if String.IsNullOrEmpty(str) then str
        else
            // 按点号分割字符串,处理每个分段后重新拼接
            str.Split('.')
            |> Array.map processSegment
            |> String.concat "."

    type System.String with
        member x.ToCamelCase() = changeCase x

    // 测试用例
    printfn "%s" ("StackOver.Flow".ToCamelCase())     // 输出 stackOver.flow
    printfn "%s" ("Hello.Word".ToCamelCase())         // 输出 hello.word
    printfn "%s" ("HTTPRequest.APIResponse".ToCamelCase()) // 输出 httpRequest.apiResponse

关键改动说明

  1. 拆分逻辑:将原changeCase的核心驼峰处理逻辑提取为processSegment函数,专注处理单个无点号的字符串段,保留你原本对连续大写等复杂驼峰场景的处理逻辑。
  2. 分段处理:新的changeCase函数先按.分割输入字符串,对每个分段调用processSegment完成首字符小写转换,最后用.拼接回完整字符串,确保所有分段的首字符都被正确转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:01:44