Java 8:从Long生成字符串ID

时间:2017-11-02 17:57:26

标签: java string groovy java-8

下面是我用来生成一个长度为12的字符串引用id的方法,它以'X'开头,以输入number结束,String的中间用零填充

public String generateRefId(Long number){       
    int digits = 1 + (int)Math.floor(Math.log10(number));
    int length = 11 - digits;
    StringBuilder refid = new StringBuilder(12);
    refid.append('X');
    for(int i= length;i> 0;i--) {
    refid.append('0'); 
    }
    refid.append(number);

    Assert.assertEquals(refid.length(),12);
    return refid.toString();
}

以下是用例

Input           Output
12345       X00000012345
999999999   X00999999999 

上面的方法工作正常,但我想知道上述方法是否可以使用java 8进一步优化?

4 个答案:

答案 0 :(得分:9)

您可以使用String.format。 E.g。

String.format("X%011d", 4366)

这会在左侧填充0的数字。但请注意,数字越大,占用的空间越大。

groovy:000> String.format("X%011d", 4366)
===> X00000004366
groovy:000> String.format("X%011d", 111111111111)
===> X111111111111

答案 1 :(得分:3)

IFF番石榴是一种选择,这将更容易:

String input = "12345";
System.out.println("X" + Strings.padStart(input, 11, '0'));

答案 2 :(得分:2)

在Groovy中,自1.0:

'X' + input.padLeft(11, '0')

答案 3 :(得分:1)

作为替代方案,apache-commons-lang提供StringUtils.leftPad() method

public static String leftPad(final String str, final int size, final char padChar) 

你可以写:

String input = "999999999";
String formatedValue = "X" + StringUtils.leftPad(input, 11, '0');