Java机试题*: 整数与IP地址间的转换(十进制、二进制转化补位、String.format())

描述

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
 
本题含有多组输入用例,每组用例需要你将一个ip地址转换为整数、将一个整数转换为ip地址。

 

数据范围:保证输入的是合法的 IP 序列

 

输入描述:

输入 
1 输入IP地址
2 输入10进制型的IP地址

输出描述:

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

import java.util.Scanner;



public class Main {
    /**
     * 思路: ip整体转为32位的二进制数,在转为10进制。整数转ip则为逆运算
     * @param args
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextLine()) {
            // 第一部分: ip转整数
            String ip = sc.nextLine();
            ipToPositive(ip);
            // 第二部分 :整数转ip
            String positive = sc.nextLine();
            positiveToIp(positive);
        }
    }

    private static void ipToPositive(String ip) {
        // .是特殊字符,在split等正则表达式中需要转义
        String[] ips = ip.split("\\.");
        long sum = 0;
        StringBuffer binaryStr = new StringBuffer();
        // 数字,可以用DecimalFormat,转化为8位二进制时,不足8位前面补0,
        // DecimalFormat df = new DecimalFormat("00000000");
        //  String.format() 也可以格式化
        for (int i = 0; i < ips.length; i++) {
       // ip十进制转为二进制 String temp
= Integer.toBinaryString(Integer.valueOf(ips[i])); // 对于数字类型的,用%s会转化失败需要转成数字,String.format()相关符号下方 binaryStr.append( String.format("%08d", Integer.valueOf(temp))); } sum = Long.valueOf(binaryStr.toString(),2); System.out.println(sum); } private static void positiveToIp(String positive) { // 这里使用 format补零一直报错,故自己写补零的逻辑 String str = Long.toBinaryString(Long.valueOf(positive)); while(str.length() < 32) { str = "0" + str; } StringBuffer ipStr = new StringBuffer(); for (int i = 0; i < 4; i++) { // 对于数字类型的,用%s会转化失败需要转成数字 ipStr.append(Integer.valueOf(str.substring(i*8, (i+1) * 8),2) + "."); } // 去掉多余. System.out.println(ipStr.substring(0, ipStr.length() - 1)); } }

String.fromat()

两种重载形式:
format(String format, Object… args) 新字符串使用本地语言环境。
format(Locale locale, String format, Object… args) 使用指定的语言环境,生成格式化的字符串。


常规类型格式:

 搭配转化符号标识:

 日期和事件格式化:

 

 

题目来源:牛客网 

参考链接:https://blog.csdn.net/wsc912406860/article/details/82771386

posted @ 2022-01-17 14:04  对月当歌  阅读(531)  评论(0)    收藏  举报