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

整数与IP地址间的转换

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

import java.math.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.stream.*;
import java.util.regex.*;
import java.util.function.*;


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        String ip = in.nextLine();
        String numStr = in.nextLine();

        System.out.println(ip2num(ip));
        System.out.println(num2ip(numStr));
    }

    static Long ip2num(String ip) {
        String binaryStr = Arrays.asList(ip.split("\\.")).stream()
        .map(Integer::parseInt).map(i-> {
            String s = Integer.toBinaryString(i);
            String z = IntStream.range(0, 8 - s.length())
            .mapToObj(c->"0").collect(Collectors.joining(""));
            return z + s;
        }).collect(Collectors.joining(""));

        return Long.parseLong(binaryStr, 2);
    }

    static String num2ip(String numStr) {
        Long num = Long.parseLong(numStr);
        String b = Long.toBinaryString(num);
        b = IntStream.range(0, 32 - b.length())
            .mapToObj(c->"0").collect(Collectors.joining("")) + b;

        final String b2 = b;
        String ip = IntStream.range(0, b2.length() / 8).mapToObj(i-> {
            return b2.substring(i * 8, i * 8 + 8);
        })
        .map(s->String.valueOf(Integer.parseInt(s, 2)))
        .collect(Collectors.joining("."));
        return ip;
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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