1

MAC アドレス文字列の形式は次のとおりです。

00:aa:bb:cc:dd:ee

また

00aabbcddee

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)

どうしたの?

4

4 に答える 4

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;
}
于 2012-06-13T04:04:55.353 に答える
1

ゼロ回以上の出現に区切り文字を設定すると、次のように next() のすべての単一文字として文字列が分割されます。

a a b b c c d e

それが見つかるか見つからないかを言っているので、分割してください。

したがって、正規表現「[0-9a-f][0-9a-f]」に一致する次のトークンを探すと、その例外がスローされます。これは、毎回 1 文字を 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);
    }

よろしく

于 2012-06-13T04:22:01.243 に答える
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;
}
于 2012-06-13T03:53:19.073 に答える
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);
  }
于 2012-06-13T03:58:02.013 に答える