如何借助10的幂简化Java代码中重复的后缀校验与乘子逻辑?
解决方案
核心是仅维护唯一的10的幂次常量,后缀校验规则和放大乘数都从该常量推导,后续调整规则只需修改一处常量即可,完全消除硬编码重复。
实现代码
首先定义预计算常量:
// 唯一可配置的10的幂次,6对应放大1000000倍、匹配6个0后缀 private static final int SCALE_EXPONENT = 6; // 后缀匹配用的0字符串,Java 11+支持String.repeat private static final String TARGET_SUFFIX = "0".repeat(SCALE_EXPONENT); // 放大乘数 private static final long MULTIPLE = (long) Math.pow(10, SCALE_EXPONENT);
修改后的业务方法:
private Collection<String> xxx(Collection<String> values) { List<String> valuesMutable = new ArrayList<>(values); String origValue = valuesMutable.get(0); if (!origValue.endsWith(TARGET_SUFFIX)) { valuesMutable.set(0, String.valueOf(Long.parseLong(origValue) * MULTIPLE)); } return valuesMutable; }
Java 8及更早版本兼容
Java 11之前没有String.repeat方法,可以替换后缀生成逻辑:
private static final String TARGET_SUFFIX = new String(new char[SCALE_EXPONENT]).replace('\0', '0');
溢出场景优化
如果后续可能把幂次调整到18以上(超过long的最大取值范围),可以用BigInteger实现无溢出计算:
private static final BigInteger MULTIPLE = BigInteger.TEN.pow(SCALE_EXPONENT); // 业务逻辑中替换计算逻辑 valuesMutable.set(0, BigInteger.valueOf(Long.parseLong(origValue)) .multiply(MULTIPLE) .toString());
内容的提问来源于stack exchange,提问作者DerBenniAusA
相关产品推荐
相关产品推荐

