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
浙公网安备 33010602011771号