Flutter:若字符串第3个字符(索引)为0则移除该字符的实现求助
修正字符串处理逻辑的问题
原代码的核心问题
- 索引与字符访问错误:
- 你要判断的是第3个字符,Java字符串索引从0开始,对应索引应为
2而非3; - Java字符串不能直接用
[索引]的方式访问字符,必须调用charAt(int index)方法; - 字符比较要用单引号包裹的
'0',双引号的"0"是字符串对象,和char类型用==比较永远不成立。
- 你要判断的是第3个字符,Java字符串索引从0开始,对应索引应为
- substring参数错误:
要移除索引2的字符,后半部分应从索引3开始截取到结尾,直接用substring(3)即可;原代码的substring(4, loginToken.length - 1)会漏掉索引3的字符,且loginToken.length -1会截断最后一个字符。 - 未处理边界情况:如果输入字符串长度小于3,调用
charAt(2)会抛出越界异常,必须先做长度判断。
修正后的代码
void checkNumber(String loginToken) { // 先校验字符串非空且长度足够,避免异常 if (loginToken != null && loginToken.length() >= 3) { // 判断第3个字符(索引2)是否为'0' if (loginToken.charAt(2) == '0') { // 拼接前2个字符 + 索引3到结尾的部分 String finalOne = loginToken.substring(0, 2) + loginToken.substring(3); showSnackBarGreen(context, finalOne, finalOne); return; } } // 不满足移除条件时,直接使用原字符串(可根据需求调整逻辑) showSnackBarGreen(context, loginToken, loginToken); }
测试验证
针对你的示例:
- 输入
"850666":第3个字符是索引2的'0',处理后得到"85" + "666" = "85666",符合预期; - 输入
"8526668":第3个字符是'2',不触发移除逻辑,直接返回原字符串,符合预期。
内容的提问来源于stack exchange,提问作者Harshana
相关产品推荐
相关产品推荐

