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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:42:27