簡體   English   中英

Java掃描儀-如何分割Mac地址?

[英]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.

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