如何将字符串首字符转为小写?含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
关键改动说明
- 拆分逻辑:将原
changeCase的核心驼峰处理逻辑提取为processSegment函数,专注处理单个无点号的字符串段,保留你原本对连续大写等复杂驼峰场景的处理逻辑。 - 分段处理:新的
changeCase函数先按.分割输入字符串,对每个分段调用processSegment完成首字符小写转换,最后用.拼接回完整字符串,确保所有分段的首字符都被正确转换。
内容的提问来源于stack exchange,提问作者gistorx
相关产品推荐
相关产品推荐

