2012-12-11 38 views
0
byte mac[] = ni.getHardwareAddress(); 
StringBuilder sb = new StringBuilder(); 

sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));  

String macAdd = new String(sb); 
System.out.println(macAdd);  

它打印出的MAC地址,這對於我的界面看起來像:如何使用字節數組從String.format獲取格式化的字符串?而格式化的字符串是什麼意思?

70-F1-A1-A1-DF-F5 

誰能請解釋我的步:

String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "") 

特別什麼字符串%02X%s是什麼意思?

+0

您可以參考Javadoc討論這一部分的內容,並準確指出該文本中您無法理解的內容? –

+0

您是否嘗試在Google上搜索各種格式說明符?查看'String.format'的文檔來了解它們。 'X'是'Hex','s'是'String'。休息是在你的理解。 –

+0

@MarkoTopolnik我不明白如何從字節數組'mac'我能夠得到一個字符串'70-F1-A1-A1-DF-F5'並且引用了語句'sb.append(.... )' – saplingPro

回答

6

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

%開始的格式規格

0表示左墊零

2表示2位寬

X表示十六進制輸出

s表示字符串

所以我們'重新輸出一個兩位十六進制數字後跟一個字符串。我知道Formatter javadoc有點密集,但這確實是它的目的。

+0

我剛剛發現了更多關於這一點的信息 - 顯然,雖然我不知道它,但格式化程序開始重用格式化元素,如果它在用完後有更多的輸出要執行。因此,對數組中的每個元素重複使用兩位數字的十六進制數字,並在末尾使用三元運算符來確定要添加的字符串是短劃線還是空字符串(所以我們在元素之間劃線,之後沒有任何內容。我仍然期望通過該數組進行某種循環 - 但是沒有看到我如何獲得一個值,更不用說增加了。 – arcy