簡體   English   中英

如何從十六進制字符串中刪除尾隨零?

[英]How to remove trailing zeros from hexadecimal string?

我有十六進制字符串,如02011A020A060AFF4C0010055D18C66C96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

我想刪除所有尾隨零並將字符串轉換為十進制。

我正在嘗試使用轉換字符串

long = Integer.parseInt(it, 16)

但得到NumberFormatException提到的字符串。

請建議。

根據問題替換尾隨零

   String s = "02011A020A060AFF4C0010055D18C66C96000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
   String t = s.replaceFirst("(00)*$", "");

但是,結果仍然不能表示為intlong 這是一個簡單的事實。

您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM