zoukankan      html  css  js  c++  java
  • int转换char的正确姿势

    一:背景

          在一个项目中,我需要修改一个全部由数字(0~9)组成的字符串的特定位置的特定数字,我采用的方式是先将字符串转换成字符数组,然后利用数组的位置来修改对应位置的值。代码开发完成之后,发现有乱码出现([]),经过排查发现,我将数字(0~9)转换成字符的姿势不对,现记下一笔,以加深印象。

    二:错误的使用方式

    如下代码所示,直接将int类型的数字直接转换成了char类型的数据,就会出现如(图-1)所示的情况

    public class TestChar {
        public static void main(String []args){
            for(int i =0,sum=9; i<sum; i++){
                char c = (char)i;
                System.out.print("the int value is : "+i+" the convert char value is : ");
                System.out.println(c);
            }
        }
    }

    图-1

    三:正确的使用方式

    后来发现字符类提供了对应的转换方法,如下代码所示,执行效果,如(图-2)所示

    public class TestChar {
        public static void main(String []args){
            for(int i =0,sum=9; i<=sum; i++){
                char c = Character.forDigit(i,10);
                System.out.print("the int value is : "+i+" the convert char value is : ");
                System.out.println(c);
            }
        }
    }

    当然了,如果,我们的前提条件是,只是将(0~9)这是十个int类型的数字转为其对应的字符表示形式的话,除了使用字符类提供的方法也有别选择,比如,下面的简单处理方式

    方式2:int->String-char

    public class TestChar {
        public static void main(String []args){
            for(int i =0,sum=9; i<=sum; i++){
                char c = String.valueOf(i).charAt(0);
                System.out.print("the int value is : "+i+" the convert char value is : ");
                System.out.println(c);
            }
        }
    }

    方式3:直接通过字符数字表现形式所对应的数字来转换

    public class TestChar {
        public static void main(String []args){
            for(int i =0,sum=9; i<=sum; i++){
                char c = (char)('0' + i);
                System.out.print("the int value is : "+i+" the convert char value is : ");
                System.out.println(c);
            }
        }
    }

    方式4:和方式3一样的道理

    public class TestChar {
        public static void main(String []args){
            for(int i =0,sum=9; i<=sum; i++){
                char c = (char)(48+ i);
                System.out.print("the int value is : "+i+" the convert char value is : ");
                System.out.println(c);
            }
        }
    }

    四:问题

    使用int直接转换为char的方式为什么不对哪?

    嗯,要回答这个问题需要弄明白char的本质了

    https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

    char: The char data type is a single 16-bit Unicode character. It has a minimum value of 'u0000' (or 0) and a maximum value of 'uffff' (or 65,535 inclusive).

    char这种简单的java数据类型特点如下:

    1:是java语言中8种基本数据类型中的一种

    2:它占两个字节十六位

    3:最小值是0,最大值是65535

    4:它可以通过单引号包装起来表示,比如:‘1’、‘A’、‘中’,也可以使用0~65535十进制(其他进制的数也可以)的整数表示,也可以使用‘u0000’~'uffff'表示

    5:它的默认值是'u0000'(或者0)

    6:只能是单个字符,多了,没有都不行(空格也是一种字符)

    当使用int类型的数据强转为char类型数据的时候,由于int数据类型是占四个字节的数据,(当int的值不在char类型的范围的时候会失去一定位数)此时char类型的数据值是int类型的值所对应的Unicode编码表中所对应的字符。

    五:其他

    如下简单代码实例和运行结果,恰好印证了我们以上的观点

    public class TestChar4 {
        public static void main(String []args){
            System.out.println('1');
            System.out.println('A');
            System.out.println('中');
            System.out.println(' ');
            //System.out.println('');//编译错误,空字面量
            //System.out.println('美国');//编译错误,字符太多了,对于字符字面量而言
    
            char max = (char)(Character.MAX_VALUE+1);
            System.out.println(max);
    
            char min = (char)(Character.MIN_VALUE-1);
            System.out.println(min);
    
            char a = 49;
            System.out.println(a);
    
            char b = 65535;
            //char b1 = 65536;//编译不通过,报必须是char类型的却发现为int类型的
    
            System.out.println(b);
            char c = 0;
            //char c1 = -1;//编译不通过,报必须是char类型的却发现为int类型的
            System.out.println(c);
    
            char d = '1'+1;
            System.out.println(d);
    
            char e = '1'+'1';
            System.out.println(e);
    
            char f = '国'+1;
            System.out.println(f);
        }
    }

  • 相关阅读:
    P1144 最短路计数 题解 最短路应用题
    C++高精度加减乘除模板
    HDU3746 Teacher YYF 题解 KMP算法
    POJ3080 Blue Jeans 题解 KMP算法
    POJ2185 Milking Grid 题解 KMP算法
    POJ2752 Seek the Name, Seek the Fame 题解 KMP算法
    POJ2406 Power Strings 题解 KMP算法
    HDU2087 剪花布条 题解 KMP算法
    eclipse创建maven项目(详细)
    maven的作用及优势
  • 原文地址:https://www.cnblogs.com/godtrue/p/8641891.html
Copyright © 2011-2022 走看看