728x90

Java에서 MAC 주소를 추출할 일이 생겼다.

기존 로직에 문제가 있을 수도 있게다 싶어 검색하고 좀 더 나은 로직을 적용해봤다.

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class MacAddressRegex {
    /**
     * 문자열에서  패턴에 맞는 문자열 즉 맥주소를 뽑아낸다.
     * @param text 검사할 문자열
     * @return 맥 주소
     */
    public static String ParseMacAddress(String text) {
        String result = null;
        String[] list = text.split("\\p{XDigit}{2}(-\\p{XDigit}{2}){5}");
        int index = 0;
        for (String str : list) {
            if (str.length() < text.length()) {
                index = str.length();
                result = text.substring(index, index + 17);
                if (!result.equals("00-00-00-00-00-00")) {
                    break;
                }
                text = text.substring(index + 17);
 
            }
        }
        return result;
    }
 
    public static boolean macValidate(String mac) {
        Pattern p = Pattern.compile("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$");
        Matcher m = p.matcher(mac);
        return m.matches();
    }
 
    private static final String PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$";
    public static void main(String[] args) {
 
        System.out.println("MAC ADDRESS 00:00:00:00:AB:BC "+macValidate("00:00:00:00:AB:BC"));
        System.out.println("MAC ADDRESS 00:00:00:EF:AB:BC "+macValidate("00:00:00:EF:AB:BC"));
        System.out.println("MAC ADDRESS 00:00:DE:EF:AB:BC "+macValidate("00:00:DE:EF:AB:BC"));
        System.out.println("MAC ADDRESS 00:GH:DE:EF:AB:BC "+macValidate("00:GH:DE:EF:AB:BC"));
        System.out.println("MAC ADDRESS 0a:02:00:00:AB:BC "+macValidate("0a:02:00:00:AB:BC"));
        System.out.println("MAC ADDRESS 0A-00-27-00-00-11 "+macValidate("0A-00-27-00-00-11"));
        System.out.println("MAC ADDRESS 18-C0-4D-DB-26-67 "+macValidate("18-C0-4D-DB-26-67"));
 
        String str = "fhind18-C0-4D-DB-26-67dkdd";
        str = "DSz00:1E:AE:4F:20:0BDntl3l";
        String macaddress = ParseMacAddress(str); // 없으면 null 을 반환한다.
        if(macaddress != null && macaddress.length() == 17){
            System.out.println(macaddress);
        } else {
            System.out.println("문자열에 MAC 주소가 없어요.");
        }
    }
}
 

 

정규표현식 웹사이트 https://regexr.com/ 에서 직접 검증을 해볼 수 있다.

 

블로그 이미지

Link2Me

,