Java编程求助:如何移除反转后二进制数的前导零
实现方案
你现有的代码已经完成了前3步的需求,第4步移除前导零可以直接复用你第三步统计到的前导零长度,不需要额外复杂逻辑,完整修改后的代码如下:
import java.util.*; class Main { public static void main(String[] args) { int woord = 100; // 1. 数字转二进制 String bin = Integer.toBinaryString(woord); // 2. 反转二进制并输出 String reversedBin = new StringBuilder(bin).reverse().toString(); System.out.println("反转后的二进制:" + reversedBin); // 3. 统计前导零数量 String[] parsed = reversedBin.split("1"); int leadingZeroCount = parsed.length > 0 ? parsed[0].length() : 0; System.out.println("反转后的前导零数量:" + leadingZeroCount); // 4. 移除所有前导零 String removedLeadingZeroBin = reversedBin.substring(leadingZeroCount); // 兼容输入为0的特殊情况,避免返回空字符串 if (removedLeadingZeroBin.isEmpty()) { removedLeadingZeroBin = "0"; } System.out.println("移除前导零后的二进制:" + removedLeadingZeroBin); // 5. 转成十进制数字输出 int result = Integer.parseInt(removedLeadingZeroBin, 2); System.out.println("最终转换后的数字:" + result); } }
补充说明
如果不想复用前导零统计结果,也可以用正则替换的方式一步完成前导零移除:
// 正则^0+表示匹配字符串开头所有连续的0 String removedLeadingZeroBin = reversedBin.replaceFirst("^0+", ""); // 同样加空值判断 if (removedLeadingZeroBin.isEmpty()) { removedLeadingZeroBin = "0"; }
以输入100为例,运行输出如下:
反转后的二进制:0010011 反转后的前导零数量:2 移除前导零后的二进制:10011 最终转换后的数字:19
内容的提问来源于stack exchange,提问作者Sjoerd van Bussem
相关产品推荐
相关产品推荐

