应用场景
在实际生产中,我们经常遇到这样的情况,就是类似生成用户号的标准化字符串。比如,生成一个以1开头,中间为0,后面递增的11位数字:10000000001、10000000002、10000000003……
生成这样的用户号的好处是格式统一,而且能够很清楚的看出此用户号的含义。比如以1开头的为用户号、以2开头的为企业号、以3开头的为商户号等等。
生成用户号后面的顺序数字有很多办法,比如采用数据库的自增属性,采用zookeeper的锁机制等等。但通过他们拿到的往往只是个顺序的数字,位数和前缀并不是逾期的格式。下面就简单介绍一下如何方面的将顺序数字生成标准格式的用户号。
实例
下面以生成用户号和商户号的实例具体说明:
package com; /** * @author 二师兄 * @date 2017/3/3 */ public class Test { public static void main(String[] args) { Long num1 = 1024L; Long num2 = 2048L; System.out.println("用户号为:" + getUserNo(1,num1)); System.out.println("企业号为:" + getUserNo(2,num2)); } /** * 根据前缀和序列号生成用户号 * @param preNumber 前缀 * @param index 序列 * @return */ public static String getUserNo(int preNumber,Long index){ return String.format("%d%010d",preNumber,index); } }
打印结果为:
用户号为:10000001024
企业号为:20000002048
1
2
方法说明
很明显,上面的例子使用了String.format方法来格式化字符串,省去了各种判断比较拼接字符串的步骤,精简了代码。
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。
String.format("%d%010d",preNumber,index)
1
(1)第一个%d代表整数类型(十进制),是preNumber的占位符,拼接字符串的时候会用preNumber的值进行替换。
(2)第二个%010d,前面第一个0代表:数字前面补0;后面的10代表字符总长度为10,d代表整数类型。这个表达式的整体含义就是,用index的值来替换此处表达式,如果index的长度不足10位,则在index的前面用0补齐。
通过以上方法,可以轻易的生成一个其他类似的指定格式的字符串。发挥你的想象力吧。