[英]java scanner - how to split a mac address?
mac地址字符串的格式可能為:
00:aa:bb:cc:dd:ee
要么
00aabbccddee
我需要一種檢索這6個部分的好方法。
這是我的代碼:
public class Mac
{
public static void main(String[] args)
{
String mac = "00:aa:bb:cc:dd:ee"; /* 00aabbccddee */
Scanner s = new Scanner(mac);
s.useDelimiter(":?"); /* zero or one occurrence */
String t = null;
while ((t = s.next("[0-9a-f][0-9a-f]")) != null)
System.out.println(t);
}
}
它引發一個異常:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.next(Scanner.java:1394)
at Mac.main(Mac.java:11)
它出什么問題了?
public static String[] getMacAddressParts(String macAddress) {
String[] parts = macAddress.split(":");
if (parts.length == 0) {
parts = new String[6];
for (int i = 0; i < 6; i++) {
parts[i] = macAddress.substring(i * 2, i * 2 + 1);
}
}
return parts;
}
String[] splitMac(String mac) {
String[] parts = null;
if (mac.length() == 6*3) {
parts = mac.split(":");
} else if (mac.length() == 6*2) {
parts = new String[6];
parts[0] = mac.substring(0,1);
parts[1] = mac.substring(2,3);
parts[2] = mac.substring(4,5);
parts[3] = mac.substring(6,7);
parts[4] = mac.substring(8,9);
parts[5] = mac.substring(10,11);
} else {
throw new RuntimeException("Invalid arg for mac addr: " + mac);
}
return parts;
}
為零次或多次出現設置定界符會將字符串拆分為next()發現中的每個單個字符,如下所示:
aabbccddee
因為您說的是找到還是找不到,請將其拆分。
因此,尋找與您的正則表達式“ [0-9a-f] [0-9a-f]”匹配的下一個標記會拋出該異常,因為它每次嘗試將一個字符與一個2個字符的正則表達式進行匹配,然后將其拋出您嘗試獲取的令牌與您提供的正則表達式不匹配,因此在執行hasNext(“ Pattern”)之前可以防止這種情況。
另外,當字符串停止通過next()方法讀取字符時,您的代碼將拋出NoSuchElementException,並驗證while條件條件中是否確實具有帶有hasNext(“ Pattern”)的下一個標記。
因此,只需刪除? 在定界符上,它將起作用。
例:
String mac = "00:aa:bb:cc:dd:ee"; /* 00aabbccddee */
Scanner s = new Scanner(mac);
s.useDelimiter(":"); /* zero or one occurrence */
String t = null;
while (s.hasNext("[0-9a-f][0-9a-f]"))
{
t = s.next("[0-9a-f][0-9a-f]");
System.out.println(t);
}
問候
String mac = "00:aa:bb:cc:dd:ee";
String[] partsArray = mac.split(":");
for(int i = 0; partsArray.length < i ;i++){
String part = partsArray[i];
System.out.println ("Splitted mac address part "+i+" is - "+part);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.