【更多小知识】【HTML】【JAVA】toString还能转换n进制

简介: 【更多小知识】【HTML】【JAVA】toString还能转换n进制

1 前言


以往,一直以为toString就是简单的转字符类型。但是,今天早上偶然在技术摸鱼群里发现,一个老哥突然接到面试电话,面试官让他做一个进制转换的方法函数,原话的题目是:“传入x,y两个参数,x代表数字,y代表进制,输出x转y进制的结果”。


  一个大佬冒了出来,用x.toString(y)得结果啦!


微信截图_20220520123801.png


还去试了一波可以撒~


微信截图_20220520123811.png


这能简单看出,是可以使用toString转换进制了。那这时候我们就来用HTMl、JAVA实验一下。


2 HTMl实验toString


效果图


微信截图_20220520123819.png


完整代码


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>南方者 - 掘金</title>
</head>
<body>
</body>
<script>
    console.log("getHEX(64, 8):", getHEX(64, 8));
    console.log("getHEX(100, 3):", getHEX(100, 3));
    console.log("getHEX(206, 4):", getHEX(206, 4));
    console.log("getHEX(209, 9):", getHEX(209, 9));
    console.log("getHEX(10, 5):", getHEX(10, 5));
    function getHEX(x, y) {
        return x.toString(y);
    }
</script>
</html>


3 JAVA实验toString


效果图


微信截图_20220520123829.png


完整代码


package com.nanfangzhe.anpai;
public class Demo {
  public static void main(String[] args) {
    try {
      System.out.println("getHEX(64,8): " + getHEX(64, 8));
      System.out.println("getHEX(100, 3): " + getHEX(100, 3));
      System.out.println("getHEX(206,4): " + getHEX(206, 4));
      System.out.println("getHEX(209,9): " + getHEX(209, 9));
      System.out.println("getHEX(10,5): " + getHEX(10, 5));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * 传入x,y两个参数,x代表数字,y代表进制,输出x转y进制的结果
   * 
   * @Method: getHEX
   * @author: nanfangzhe
   * @date: 2022年4月9日
   * @param x
   * @param y
   * @return String
   */
  public static String getHEX(int x, int y) {
    return Integer.toString(x, y);
  }
}


拓展-了解toString底层源码


突然想到,我们去了解底层,这样我们不就完美的完成那个网友的面试需求了。赶紧的,我们进一步去了解一下Integer.toString(i, radix)的源码,看看底层原理~


微信截图_20220520123838.png


"Returns a string representation of the first argument in the radix specified by the second argument."(来源底层英文注释)


译:就是说,传入两个参数,第二个参数是指定进制数,返回第一个参数的字符串表示形式。


  这不正对面试的答案吗?


接下来,我们来看看底层,笔者的分析与理解就直接在代码里注释了~


(资料参考:blog.csdn.net/qq_15068711…


// digits(10个数字 + a-z 26个字母)
    final static char[] digits = {
        '0' , '1' , '2' , '3' , '4' , '5' ,
        '6' , '7' , '8' , '9' , 'a' , 'b' ,
        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
        'o' , 'p' , 'q' , 'r' , 's' , 't' ,
        'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    };
    public static String toString(int i, int radix) {
        // MIN_RADIX:2  MAX_RADIX:36 (这里进制数超过36或小于2就置为10进制)
        if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
            radix = 10;
        /* Use the faster version */
        if (radix == 10) { // 十进制就直接还回第一个参数的String形式
            return toString(i);
        }
        // 用于转换进制的字符数组
        char buf[] = new char[33]; // 定义32个字符(返回String类型会计算偏移量)
        boolean negative = (i < 0); 
        int charPos = 32; // 标记buf数组最后一位,方便后面边存放字符
        // 不为负数,置为负数(主要目的是考虑边界值(如果是正数再进行进制转换就超出范围)
        // Tips:int范围是 -(2^31) ~ (2^31)-1
        if (!negative) { 
            i = -i; 
        }
        // 使用短除法来转换进制
        //(短除法:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。)
        while (i <= -radix) { // 循环短除法,找到所有余数
            buf[charPos--] = digits[-(i % radix)];  // digits(10个数字 + a-z 26个字母)
            i = i / radix;
        }
        buf[charPos] = digits[-i];  
        if (negative) {
            buf[--charPos] = '-'; // 如果第一个参数传入是负数,首位加上“-”
        }
        return new String(buf, charPos, (33 - charPos));
    }


例子:将18转成2进制


微信截图_20220520123848.png


最后


  感谢你看到最后,最后再说两点~


  ①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。

  ②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~


  我是南方者,一个热爱计算机更热爱祖国的南方人。


  (文章内容仅供学习参考,如有侵权,非常抱歉,请立即联系作者删除。)



目录
相关文章
|
6月前
|
Java
有关Java发送邮件信息(支持附件、html文件模板发送)
有关Java发送邮件信息(支持附件、html文件模板发送)
394 1
|
2月前
|
XML JavaScript Java
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
|
3月前
|
存储 Oracle Java
01 Java概述基础与计算机基础(DOS+进制+原码反码补码)
01 Java概述基础与计算机基础(DOS+进制+原码反码补码)
43 17
|
4月前
|
Java
Java中的Object类 ( 详解toString方法 | equals方法 )
Java中的Object类 ( 详解toString方法 | equals方法 )
|
4月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
70 0
|
4月前
|
Java Apache Maven
Java:commons-codec实现byte数组和16进制字符串转换
在上述代码中,`Hex.encodeHexString(bytes)`用于将byte数组转换为16进制字符串,`Hex.decodeHex(hexString)`用于将16进制字符串转换为byte数组。
117 0
|
6月前
|
设计模式 前端开发 Java
Java与HTML的深度融合:技术解析与应用实践
Java与HTML的深度融合:技术解析与应用实践
436 1
|
5月前
|
算法 Java
Java将16进制的字符串转换为10进制数的方法
【6月更文挑战第27天】Java将16进制的字符串转换为10进制数的方法
1680 0
|
5月前
|
Java
java实现字符串与十六进制字符串互转
java实现字符串与十六进制字符串互转
|
5月前
|
Java Maven
Java在线预览(word转html)--强势推荐
Java在线预览(word转html)--强势推荐
124 0