Dart Flutter中如何实现字符串字符与数字的双向替换
Dart/Flutter 字符-编码双向转换实现
映射规则
- 英文字母不区分大小写,按字母表顺序映射:A/a对应1,B/b对应2……Z/z对应26
- 空格字符映射为
/ - 编码串的各单元之间用半角空格分隔
核心实现代码
/// 字符串转对应编码串 String stringToCode(String input) { final List<String> codeList = []; for (final char in input.split('')) { final lowerChar = char.toLowerCase(); if (lowerChar == ' ') { codeList.add('/'); continue; } // 小写a的ASCII码值为97,偏移96后刚好得到1-26的对应序号 final charCode = lowerChar.codeUnitAt(0) - 96; if (charCode >= 1 && charCode <= 26) { codeList.add(charCode.toString()); } } return codeList.join(' '); } /// 编码串反向还原为原始字符串 String codeToString(String codeInput) { final StringBuffer result = StringBuffer(); final codeUnits = codeInput.split(' '); for (final unit in codeUnits) { if (unit == '/') { result.write(' '); continue; } final int? numCode = int.tryParse(unit); if (numCode != null && numCode >=1 && numCode <=26) { // 序号加96得到对应小写字母的ASCII码,转字符输出 result.write(String.fromCharCode(numCode + 96)); } } return result.toString(); }
效果验证
运行以下测试代码即可得到和示例完全一致的输出:
void main() { const testInput = "Hello world"; final codeOutput = stringToCode(testInput); print("Enter a string: $testInput"); print("Output: $codeOutput"); // 打印结果:8 5 12 12 15 / 23 15 18 12 4 final reverseOutput = codeToString(codeOutput); print("反向还原结果:$reverseOutput"); // 打印结果:hello world }
扩展说明
- 当前实现默认不区分字母大小写做映射,反向转换输出全小写字符。如果需要保留原始字符串的大小写信息,可以调整映射规则,比如给大写字母增加专属标识(如大写A映射为
1#),反向解析时识别标识输出大写字符即可。 - 代码默认自动过滤非英文字母、非空格、非法数字编码的无效内容,避免运行报错。如果需要严格校验输入格式,可以自行添加非法内容抛出异常的逻辑。
内容的提问来源于stack exchange,提问作者Harris Nasir
相关产品推荐
相关产品推荐

