我在字符串中有可用的十六进制数字,我想通过删除前导零来缩短它。我需要用Java来完成
例如:
docker run --cap-add=NET_ADMIN image
当前下面的代码引发NumberFormatException异常
docker network inspect
答案 0 :(得分:3)
答案 1 :(得分:2)
您没有正确使用$state.go('stateName', { param: "test" } );
。
应该是:
Long.parseLong
但这将导致
System.out.println(Long.toHexString(Long.parseLong("0000000000000000000000000A000000",16)));
这并不是您想要的。
您必须添加一些其他格式才能获得所需的确切输出:
a000000
现在输出将是:
String shortHex = Long.toHexString(Long.parseLong("0000000000000000000000000A000000",16)).toUpperCase ();
String formatted = (shortHex.length () % 2 == 0 ? "0x":"0x0") + shortHex;
System.out.println (formatted);
如果您输入的内容以“ 0x”开头,则必须在调用0x0A000000
之前修剪该前缀。
答案 2 :(得分:1)
基本思路:
0A000000
中的0000000000000000000000000A000000
。答案 3 :(得分:1)
如OP注释中所述,十六进制字符串(如Long.parseLong()
所示)不以0x
开头。这就是为什么您遇到NumberFormatException。
有多种解决方法。
如有必要,请删除0x
,进行解析,然后将其重新添加
static String shortenHex(String input){
if(input.charAt(1)=='x') inputnput = input.substring(2);
return "0x"+Long.toHexString(Long.parseLong(shortenedInput, 16)).toUpperCase();
}
添加0x
(如果适用),然后使用正则表达式
static String shortenHex(String input){
if(input.charAt(1)!= 'x') input = "0x"+input;
return input.replaceAll("(?<=0x)0+","");
}
答案 4 :(得分:0)
如果只需要字符串形式而不是文字形式,则应该可以。
String[] hex = {
"0000000000000000000000000A000000",
"0x0000000000000000000000000A000000",
"000000000000000000000000C0A80000",
"0x000000000000000000000000C0A80000"
};
for (String h : hex) {
String hmod = h.replaceAll("[0x]*([123456789ABCDEF].*)", "0x$1");
System.out.println(h + " -> " + hmod);
}