IP地址转换

包结构

整体用了策略模式,方便后续扩展转换算法,调用者不满意转换算法,也可以自己实现,灵活性较强。


包结构
package com.example.iptoint.convertStrategy;

/**
 * Created by graymonkey on 18-3-14.
 * 抽象转换接口,后续可能有多种转换算法
 */

public interface IIPConvertToInt {
    int convertToInt(String ip);
}
package com.example.iptoint.convertStrategy;

/**
 * Created by graymonkey on 18-3-14.
 * 默认转换器
 */

public class DefaultConvertStrategy implements IIPConvertToInt {
    @Override
    public int convertToInt(String ip) {
        int intIp = 0x00000000;
        int shiftBits = 24;
        //根据.号分割ip地址
        String[] ipStrArrays = ip.split("\\.");
        for (String part:ipStrArrays){
            int partInt = Integer.parseInt(part);
            intIp |= partInt <<shiftBits;
            shiftBits -=8;
        }
        System.out.println(intIp);
        return intIp;
    }
}
package com.example.iptoint;

import com.example.iptoint.convertStrategy.DefaultConvertStrategy;
import com.example.iptoint.convertStrategy.IIPConvertToInt;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by graymonkey on 18-3-14.
 * IP V4 地址抽象
 */

public class IPAddress {
    private String mIpStr;
    private IIPConvertToInt mDefaultConvertStrategy = new DefaultConvertStrategy();

    public IPAddress(String ip) {
        IPMatcher.matchIP(ip);
        this.mIpStr = ip;
    }

    /**
     * 设置IP地址转换为int的转换器
     * 如果调用者不满意我们提供的算法,可以自己实现
     * @param mDefaultConvertStrategy
     */
    public void setConvertStrategy(IIPConvertToInt mDefaultConvertStrategy) {
        this.mDefaultConvertStrategy = mDefaultConvertStrategy;
    }

    /**
     * IP地址转换为int
     * @return
     */
    public int convertToInt(){
        return mDefaultConvertStrategy.convertToInt(mIpStr);
    }

    /**抽象一个IP V4格式校验器*/
    private static class IPMatcher {
        static void matchIP(String ip){
            //正则匹配IPV4格式
            Pattern p = Pattern.compile("^((25[0-5]|2[0-4]\\d|[1]{1}\\d{1}\\d{1}|[1-9]{1}\\d{1}|\\d{1})($|(?!\\.$)\\.)){4}$");
            Matcher m = p.matcher(ip);
            boolean isMatch = m.matches();
            if (isMatch){
                System.out.println("IPv4格式正确");
            } else {
            throw new RuntimeException("IPv4格式错误,请检查");
            }
        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • IP地址总是由4个0-255的数字以"."隔开的形式来显示给用户,例如192.168.0.1。在计算机中,一个IP...
    FantJ阅读 3,808评论 0 0
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,496评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,107评论 19 139
  • ‘在这个时间提起爱情,不是因为缅怀过去,只是那天气氛刚好,姑娘吹着萨克斯,有酒,有朋友,还有我的故事。’ ① A先...
    肖_先生阅读 2,325评论 0 0
  • 不要太把自己当回事,你什么也不是。
    x浅色年华阅读 1,310评论 0 0

友情链接更多精彩内容