[英]How to remove trailing zeros from hexadecimal string?
我有十六進制字符串,如02011A020A060AFF4C0010055D18C66C96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
我想刪除所有尾隨零並將字符串轉換為十進制。
我正在嘗試使用轉換字符串
long = Integer.parseInt(it, 16)
但得到NumberFormatException提到的字符串。
請建議。
根據問題替換尾隨零
String s = "02011A020A060AFF4C0010055D18C66C96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
String t = s.replaceFirst("(00)*$", "");
但是,結果仍然不能表示為int
或long
。 這是一個簡單的事實。
您可以使用BigInteger
class。
您的字符串表示一個非常大的 integer 不能容納到int
類型的變量中。 您可以使用BigInteger
將其解析為十進制 integer 。
演示:
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
BigInteger num = new BigInteger(
"02011A020A060AFF4C0010055D18C66C96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
16);
System.out.println(num);
}
}
Output:
1601774156032550143629384364472675906890742343243921647127483666720143286838483191778518780074715465142869671834006975796514903403440608079859679232
但是,如果您只是想知道如何去除字符串中的尾隨零,您可以將正則表達式0+$
替換為""
。 但是,請注意它會改變數字的值,例如 9(沒有尾隨零)不等於 90(尾隨零)。
演示:
public class Main {
public static void main(String[] args) {
String num = "02011A020A060AFF4C0010055D18C66C96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
num = num.replaceAll("0+$", "");
System.out.println(num);
}
}
Output:
02011A020A060AFF4C0010055D18C66C96
正則表達式的解釋:
0+
:一個或多個零$
:在行尾斷言 position
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.