我知道我可以使用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表示精度可用于限制总输出宽度,但仅限于某些数据类型。
有什么想法吗?感谢。
答案 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。