在学习java的过程中,发现API文档里面例如包装类,String类有很多方法,敢到很头疼,为了学而去学,短时间的学习很难理解透彻和巩固,希望在博客中记录下我java成长的路程,希望能与新手共勉,一起学习,有错误的地方还望指出。
偶然看到的一个题目,让我跃跃欲试,题目是把十六进制的数的字符串转化二进制的数的字符串,二话不说,先把代码撸出来再说。
String str="aB0";
StringBuilder sb=new StringBuilder();
char[] ch=str.toLowerCase().toCharArray();//统一转化为小写
for(int i=0;i<ch.length;i++)
{
switch(ch[i])
{
case '0': sb.append("0000");break;
case '1': sb.append("0001");break;
case '2': sb.append("0010");break;
case '3': sb.append("0011");break;
case '4': sb.append("0100");break;
case '5': sb.append("0101");break;
case '6': sb.append("0110");break;
case '7': sb.append("0111");break;
case '8': sb.append("1000");break;
case '9': sb.append("1001");break;
case 'a': sb.append("1010");break;
case 'b': sb.append("1011");break;
case 'c': sb.append("1100");break;
case 'd': sb.append("1101");break;
case 'e': sb.append("1110");break;
case 'f': sb.append("1111");break;
}
}
System.out.println(sb);
后来我偶然看到到Integer.parseInt(String s)
的方法(之前只是粗略的带过,不记得了),这个方法的底层调用的是parseInt(String s, int radix)
的方法,其中radix为10,这个方法是根据radix这个基数来将字符串解析成对应的整数,基数的取值范围为2到36,本人估计这2是01,36是0-9a-z,试了试,果然没错。这时候,我找到方法来转化了为int型了,然后顺便看到有toBinaryString(int i)在转化为最后的字符串型,这感觉就省事多了,代码就改为
int temp=Integer.parseInt("aB0",16);
String strnew=Integer.toBinaryString(temp);
System.out.println(strnew );
值得注意的是,因为parseInt和valueOf感觉差不多,一个返回值是int,一个返回值是Integer,看了下底层,原来valueOf就是返回值就是Integer.valueOf(parseInt(s,radix)),真是省事,说到底就是一个方法,toBinaryString这些底层都调用私有的静态方法toUnsignedString通过传进去的参数进行不同的操作,这些是我那时候突然看到的,感觉大师写的代码看不懂,最多只能知道大概的意思,后来当我以为我做出来的时候,我在网上看到了一个更好的方法(就我知道的来说),原来我们常用的toString,在Integer里面的可以带参数,toString(int i, int radix)
API文档说返回用第二个参数指定基数表示的第一个参数的字符串表示形式。
所以最后我的代码改成了
int temp=Integer.parseInt("aB0",16);
String str2=Integer.toString(temp, 2);
System.out.println(str2);
感觉收获颇多,既然有了toString这么强大的方法,为啥还有toBinaryString这些方法的存在呢,还会想一个问题,自己写的代码好,还是知道别人的方法好,公司面试或者做项目是不是也是调用别人的API呢,作为刚刚学完的小菜鸟,感觉学好java还有很长的路要走。