java补充0 java数字左侧补零补0 NumberFormat实现数字左侧补0

一、提出需求

1、在做一个编号生成规则中,有个规则如下: 编码序号为 5 位数,不足部分左侧补0

 

二、代码实现

1、使用 java.text.NumberFormat 实现

/**
 * description: 格式化数字,实现左侧补 0.
* @param num  格式化的数字
 * @param min  最小位数
* @param max  最大位数
 * @return String
 * @version v1.0
 * @author w
 * @date 2019年7月19日 下午2:08:31
 */
public String fill(int num , int min , int max) {
	NumberFormat numberFormat = NumberFormat.getInstance();
	// 禁用数字格式化分组。 如:  000,001
	numberFormat.setGroupingUsed(false); 
	// 保留最小位数
	numberFormat.setMinimumIntegerDigits(min);
	// 保留最大位数
	numberFormat.setMaximumIntegerDigits(max);
	return numberFormat.format(num);
}

2、使用 String.format 实现

/**
 * description: 使用 String.format 格式化数字,实现左侧补 0
 * @param num  需要格式化的数字
 * @param digit 生成字符串长度(保留数字位数)
 * @return String
 * @version v1.0
 * @author w
* @date 2019年7月19日 下午2:14:31
 */
public String fillString(int num , int digit) {
		/**
		 * 0:表示前面补0
		* digit:表示保留数字位数
		 * d:表示参数为正数类型
		 */
	return String.format("%0"+digit+"d", num);
}

 

三、测试

1、 测试 NumberFormat 实现 左侧补 0

@Test
public void testOne() {
	/**
	*  需求: 编码序号为 5 位数,不足部分左侧补 0 
	*  即: max = min =5 
	 */
	String fill = fill(2, 5, 5);
	System.out.println(fill);
	fill = fill(233, 5, 5);
	System.out.println(fill);
}

 

2、结果如下:

00002

00233

符合条件,达到预期结果!

 

3、 测试 String.format 实现左侧补0

@Test
public void testTwo() {
	String fillString = fillString(1 , 5);
	System.out.println(fillString);
	fillString = fillString(110 , 5);
	System.out.println(fillString);
}

4、结果如下:

00001

00110

符合条件,达到预期结果!

 

四、总结

1、NumberFormat 可以实现数字补0,同时支持设置 最大、最小位数,对数字处理更灵活

2、String.format 可以实现数字补0,但不仅仅限于补0,也可以填充其他的数字、或者字符,对字符处理更灵活

3、只要能实现需求就好,不必纠结那个好!