不使用内置函数实现字符串转整数:求更优实现方案
更优雅的字符串转整数实现方案
这里有几个优化后的实现,解决你原代码中重复逻辑、负数处理繁琐的问题:
方案一:统一符号与数字处理(原生循环)
这个方案将符号判断和数字计算分离,避免重复代码,逻辑更清晰:
private static int StringToNumber(string str) { int sign = 1; int startIndex = 0; // 处理负号 if (str[0] == '-') { sign = -1; startIndex = 1; } int number = 0; for (int i = startIndex; i < str.Length; i++) { number = number * 10 + (str[i] - '0'); } return number * sign; }
优势:
- 消除了原代码中两个重复的循环分支,符合DRY原则
- 负数处理更直接:先记录符号,最后统一应用,避免了原代码中
continue跳过负号后还要调整数值的繁琐逻辑 - 代码结构更清晰,易读易维护
方案二:使用LINQ简化实现
如果项目允许使用LINQ,可以用更紧凑的写法:
private static int StringToNumber(string str) { var sign = str.StartsWith('-') ? -1 : 1; var digits = str.StartsWith('-') ? str.Skip(1) : str; return digits.Aggregate(0, (current, c) => current * 10 + (c - '0')) * sign; }
优势:
- 用三元表达式一行完成符号判断和数字范围截取
- 借助
Aggregate方法将字符序列直接累加成整数,代码简洁紧凑 - 保留了逻辑的可读性,没有过度简化
原代码的可优化点
你的原实现存在几个可以改进的地方:
- 两个分支重复了循环逻辑,增加了维护成本
- 负数处理时先累加再乘10的逻辑,导致最后需要额外除以10,容易出错且不够直观
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

