如何在Delphi中将camelCase或PascalCase字符串转换为可读标签?
通用解决CamelCase/PascalCase转空格分隔标签的Delphi函数
你当前的硬编码方式虽然能工作,但扩展性极差——新增标识符就得修改函数,完全不符合DRY原则。下面是一个通用的函数,能自动处理所有CamelCase和PascalCase格式的字符串,无需硬编码任何具体标识符:
function CamelCaseToReadable(Input: string): string; var I: Integer; begin Result := Input; if Length(Result) = 0 then Exit; // 遍历字符串,在小写字母后跟大写字母的位置插入空格 I := 2; while I <= Length(Result) do begin if (Result[I] in ['A'..'Z']) and (Result[I-1] in ['a'..'z']) then begin Insert(' ', Result, I); Inc(I); // 插入空格后,下一个字符的位置要+1 end; Inc(I); end; // 可选:如果是camelCase(首字母小写),可以将首字母转为大写 // Result[1] := UpCase(Result[1]); end;
函数逻辑说明
- 遍历输入字符串的每个字符(从第2个字符开始)
- 当检测到当前字符是大写字母,且前一个字符是小写字母时,在两者之间插入空格
- 插入空格后,需要额外递增索引,避免重复处理新插入的空格
- 可选的首字母大写转换:如果你的场景中存在camelCase格式的标识符(比如
loadUserData),可以取消注释最后一行代码,将首字母转为大写,统一输出风格
测试验证
用你提供的ReadableIdentifiers数组测试这个函数,输出结果完全符合你的需求:
Load User Data
Save To File
Create New User Account
Is User Logged In
Generate Report Preview
Handle Request Error
Fetch User Profile
Parse Date String
Validate Input Field
这个方案的优势在于:
- 无需维护硬编码的映射表
- 自动兼容所有CamelCase/PascalCase格式的字符串
- 代码简洁,性能高效(线性遍历一次字符串)
内容的提问来源于stack exchange,提问作者Moshelly
相关产品推荐
相关产品推荐

