2012-06-13 31 views
1

MAC地址串可以是以下格式:java扫描仪 - 如何拆分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) 

这有什么错呢?

回答

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

设置为零和或多个分隔符将串中的下一个分割为每一个字符()发现这样的:

一个 一个 b b c c d d e e

因为您在说如果它确实或没有找到它,请将其拆分。

所以找你的正则表达式匹配的下一个标记“[0-9A-F] [0-9A-F]”抛出异常,因为它试图匹配有2个字符的正则表达式,每次一个字符,它抛出它然后你试图得到的令牌不符合你正在给的正则表达式,因此在阻止之前执行hasNext(“模式”)。

此外,如果字符串通过next()方法停止读取字符,则验证其是否在while条件中具有hasNext(“Pattern”)的下一个标记时会抛出NoSuchElementException。

所以,只要删除?在分隔符上,它会工作。

实施例:

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

问候

+0

感谢您的解释 – pengguang001