2015-06-10 103 views
0

我知道我可以使用String.substring或寫一些額外的代碼,但有沒有簡單的方法來實現這一點只使用String.format?Java格式整數限制寬度通過截斷到右

例如,我只想要的前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的格式化文檔,所述精度可以用來限制整個輸出寬度,但只對某些數據類型。

任何想法?謝謝。

+2

因爲整數不能有小數點(這就是爲什麼你會得到這個例外),那麼第二個不會工作。 – jzarob

+0

如果'v'是(說的話),你想要什麼''' )'0xEF'? – ruakh

+0

最簡單的解決方案就是取一個子字符串:'String.format(「%6x」,v).substring(0,6)'。如果小於6個十六進制數字,則必須注意。根據[documentation](http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax)的 – Jesper

回答

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); 
} 
0

既然你想只用格式化來做到這一點。

這是我的結果。

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); 
    } 

} 

我轉換十六進制數爲字符串,然後截斷或左電極墊與所述第二格式化的字符串。

+0

看起來不錯。謝謝。 –