如何提取整数的前N位数字并保存为新的int类型值
问题说明
现有正整数编码,位数仅可能为以下4种:
- 3位,例如
123 - 4位,例如
1234 - 7位,例如
1234567 - 8位,例如
12345678
需按照规则提取前缀生成新的int类型值:
- 7位编码保留前3位,例:
1234567 -> 123 - 8位编码保留前4位,例:
12345678 -> 1234 - 3位、4位编码无需处理,直接保留原值
你目前搭建的判断逻辑框架存在小瑕疵,原代码如下:
int number = 12345678; if(number>9999999){ //if the number is codified on 8 ciphers ... }else if(number>9999 && number<10000000){ \if the number is codified on 7 ciphers ... }else{ ... }
实现方案
直接利用整数除法自动截断小数的特性即可实现需求,不需要做字符串转换,性能更高,逻辑也简单。
首先修正你原逻辑的两个问题:
- 7位整数的范围是
1000000 ~ 9999999,原判断条件下限写为number>9999会误把5、6位数字判定为7位,导致计算错误 - 第二行注释前误写了反斜杠,需要改为
//才符合Java语法
补全后的可运行代码如下:
int number = 12345678; int result; if (number >= 10000000) { // 8位数字,除以10000截断后4位,保留前4位 result = number / 10000; } else if (number >= 1000000) { // 7位数字,除以10000截断后4位,保留前3位 result = number / 10000; } else { // 3、4位数字直接返回原值 result = number; }
可以用测试用例验证结果:
- 7位输入
1234567:1234567 / 10000 = 123,符合要求 - 8位输入
12345678:12345678 / 10000 = 1234,符合要求 - 3位输入
123、4位输入1234:直接返回原值,符合要求
如果业务场景可能出现负数编码,只需要在处理前先取绝对值,计算完结果后补回负号即可。
注:也可以通过转字符串截取前缀再转回整数的方式实现,但整数运算没有额外的类型转换开销,性能更优,更推荐使用。字符串实现方式参考如下:
String numStr = String.valueOf(number); int result; if (numStr.length() == 8) { result = Integer.parseInt(numStr.substring(0,4)); } else if (numStr.length() ==7) { result = Integer.parseInt(numStr.substring(0,3)); } else { result = number; }
内容的提问来源于stack exchange,提问作者ofstack773
相关产品推荐
相关产品推荐

