Flutter编码转换函数问题:输入‘anh’无法返回预期值‘70’
问题分析与解决方案
问题根源
你的代码中,someFunc 函数会把输入字符串用 split('') 拆成单个字符列表,比如输入 anh 会被拆成 ['a', 'n', 'h'],然后逐个字符调用 codecVal。此时只有 'a' 能匹配到返回 19,'n' 和 'h' 走 default 返回空字符串,最终拼接结果是 19--(你看到的 19 是因为空字符串被忽略或未显示),而不会触发 codecVal 中 'anh' 的匹配分支——因为你从来没把完整的 anh 字符串传给 codecVal。
解决方案
根据你的需求,分两种情况处理:
情况1:仅匹配完整字符串(输入是单个字符或指定多字符组合)
直接修改 someFunc,不再拆分字符,把整个输入字符串传给 codecVal:
String someFunc(String val) { return codecVal(val.toLowerCase()); }
这样输入 anh 会直接匹配到 '70',输入 a 返回 '19',输入 b 返回 '00'。
情况2:优先匹配完整字符串,无匹配时再拆分单个字符处理
如果需要同时支持完整字符串匹配和单个字符匹配(比如输入 anh 返回 70,输入 ab 返回 19-00),可以调整 someFunc 的逻辑:
String someFunc(String val) { // 先检查整个字符串是否有对应编码 String fullCode = codecVal(val.toLowerCase()); if (fullCode.isNotEmpty) { return fullCode; } // 无完整匹配时,拆分单个字符处理并过滤空结果 final charList = val.toLowerCase().split(''); final codeList = charList.map((e) => codecVal(e)).where((code) => code.isNotEmpty).toList(); return codeList.join("-"); }
验证
修改后测试:
- 输入
anh→ 返回70 - 输入
a→ 返回19 - 输入
ab→ 返回19-00 - 输入
xyz→ 返回空字符串
内容的提问来源于stack exchange,提问作者Phuc Nguyen
相关产品推荐
相关产品推荐

