题解 | #整数与IP地址间的转换#

整数与IP地址间的转换

https://www.nowcoder.com/practice/66ca0e28f90c42a196afd78cc9c496ea

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String ipss = in.nextLine();
              getInput(ipss);  
        String ipp = in.nextLine();    
             getInput(ipp); 
        in.close();

    }


    public static void getInput(String input){
           if(input.contains(".")){
             System.out.println(IptoIn(input)); 
           }else{
            System.out.println(IntToIp(input));
           }


    }

    public static long IptoIn(String ipp) {
        // String ipp = "10.0.3.193";
        // System.out.println("ipp:" + ipp);
        String[] strip = ipp.split("\\."); //特殊字符.需要使用转义字符./
        StringBuilder sb = new StringBuilder();
        for (String str : strip) {
//           System.out.println("ippstr:"+str);
            long key = Long.parseLong(str);
            String binarayStr = Long.toBinaryString(key);
            String to8binaryStr = to8bitBinary(binarayStr);
//           System.out.println("binaryStr:"+to8binaryStr);
            sb.append(to8binaryStr);
        }
        String builder = sb.toString();
//       System.out.println("bilder:"+builder);
        long target = Long.parseLong(builder, 2);
//       System.out.println("bilderint:"+target);
        return target;
    }



    public static String IntToIp(String strss) {
        // int sint = 167773121;
        Long sint = Long.parseLong(strss);
       String instr = Long.toBinaryString(sint);
        String int32Bit = to32bitBinary(instr);
        // System.out.println("instr:" + int32Bit);
        String[] list = listStr(int32Bit);//八位数拆分
        StringBuilder sb = new StringBuilder();
        for (String str : list) {
            int key = Integer.parseInt(str, 2);
//          System.out.println("target:"+key);
            String keyStr = key + "";
            sb.append(keyStr).append(".");//00001010 00000000 00000011 11000001
        }

        String target = sb.toString();
        if (target.endsWith(".")) {
            target = target.substring(0, target.length() - 1);
        }
//      System.out.println("target:"+target);
        return target;
    }
    //不足八位的空位补零
    public static String to8bitBinary(String str) {


        return String.format("%8s", str).replace(' ', '0');
    }

    public static String to32bitBinary(String str) {


        return String.format("%32s", str).replace(' ', '0');
    }


    //按照八位分割
    public static String[]  listStr(String str) {
        int length = str.length();
        String[] strList = new String[4];
        int pos =0;
        for (int i = 0; i < length; i += 8) {
            strList[pos++]=(str.substring(i, i + 8));
        }

        return strList;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务