Java格式整数限制宽度,通过截断到右边

时间:2015-06-10 18:47:24

标签: java string integer format truncate

我知道我可以使用String.substring或者编写一些额外的代码,但是有一种简单的方法可以通过只使用String.format来实现吗?

例如,我只想要前6个字符" 1234ab"在结果中:

int v = 0x1234abcd;
String s = String.format("%06x", v) // gives me 1234abcd
String s = String.format("%06.6x", v) // gives me IllegalformatPrecesionException

Java Formatter doc表示精度可用于限制总输出宽度,但仅限于某些数据类型。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:0)

根据您要截断的十六进制数字的方式...

你可以除以16的幂

public static void main(String[] args) throws Exception {
    int v = 0x1234abcd;
    // This will truncate the 2 right most hex digits
    String hexV = Integer.toHexString(v / (int)Math.pow(16, 2));
    System.out.println(hexV);
}

结果:

  

1234ab

即使你陷入困境并除以超过十六进制字符串长度的16的幂,结果也只是零。

然后是substring()方法

public static void main(String[] args) throws Exception {
    int v = 0x1234abcd;
    String hexV = Integer.toHexString(v);
    // This will truncate the the 2 most right hex digits 
    //   provided the length is greater than 2
    System.out.println(hexV.length() > 2 ? hexV.substring(0, hexV.length() - 2) : hexV);
}

答案 1 :(得分:0)

因为您只想使用Formatter。

这是我的结果。

1234ab
  1234abcd

这是代码。

public class Tester {

    public static void main(String[] args) {
        int v = 0x1234abcd;
        String s = String.format("%6.6s", String.format("%x", v));
        System.out.println(s);
        s = String.format("%10.10s", String.format("%x", v));
        System.out.println(s);
    }

}

我将十六进制数转换为String,然后使用第二个Formatter截断或左键填充String。