Java中Integer和String浅谈

Java中的基本数据类型有八种:int、char、boolean、byte、long、double、float、short。Java作为一种面向对象的编程语言,数据在Java中也是一种对象。我们用基本数据类型创建的对象,如 int x = 0;这里的x只有值这个属性,没有(或者很少)有其他的方法。这在一些需要对数据进行操作时变的很不方便,程序员需要自己编写很多代码去实现一些常用的功能,增加了工作量及程序的大小。

所以,Java中每种基本数据类型都有其对应的引用类,或者叫封装类。如int的引用类为Integer,char 的引用类为Character。这些类是在Java的编译环境中已经事先写好的类,类中已经写有大量的,针对该数据类型的常用的方法,并且这些方法是经过优化的。在编程时,我们只需要用这些类去创建对象,就可以直接调用相应的方法。有利就有弊,在创建这些类的对象时,所用的时间和空间是要比基本数据类型大,这就提高了程序的时间复杂度和空间复杂度,所以在应用时,如果不是十分必要,尽量还是使用基本数据类型。

下面,我主要介绍Integer类中的一些方法的使用。

谈到类,首先要说的就是对象的构造方法。Java中每个类都会有构造方法,用于在创建该类的对象时调用。如方法中没有对构造方法重写,则默认格式为:类名 对象名 = new 类名();重写后则根据所传参数调用对应方法。

Integer类中重写了两种构造方法。第一种为 Integer(int value),传入一个int值作为对象的值,这个方法与语句:Integer 对象名= (int)value等价。这种方法比较好理解,就不再举例。

第二种方法为Integer(String  s) 这个方法构造一个Integer 对象,它表示 String 参数所指示的int值。使用与parseInt 方法(对基数为 10 的值)相同的方式将该字符串转换成int值。该方法在检测到异常,即当String s所包含的内容不是数字,或者不可解析的整数时,会抛出一个NumberFormatException。

 

 

Java代码  收藏代码
  1. String s = "0101010";   
  2. Integer i = new Integer(s);   
  3. System.out.println(i);   

 

  结果为:101010

 

 

Java代码  收藏代码
  1. String s = "dfadffcfa";   
  2. Integer i = new Integer(s);   
  3. System.out.println(i);   

 

 Exception in thread "main" java.lang.NumberFormatException: For input string: "dfadffcfa"
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.<init>(Unknown Source)

 

根据以上代码可知,这种构造方法不需要用try  catch或者throws来测试,因为该异常是Runtime型的异常,在程序运行时虚拟机会自动抛出。

 

接下来介绍几个最近在做文件压缩时用到的方法。

1、parseInt

在Integer类中,方法名为parseInt的方法有两个,所传参数不同(方法的重载)。只有一个Strirng传入的,即parseInt(String s)是将一个String中的字符进行十进制解析,返回一个static int。和上面提到的第二种构造方法一样,这个方法对于String中所含的字符也有要求,除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D') 外,字符串中的字符都必须是十进制数字。如果不符合要求,同样会在运行是报错,也是一个Runtime类型的异常。具体应用请看下面代码

 

Java代码  收藏代码
  1. String s = "11234516";   
  2. int i = Integer.parseInt(s);   
  3. System.out.println(i);  

 

输出结果为 11234516

 

Java代码  收藏代码
  1. String s = "112adf34516";   
  2. int i = Integer.parseInt(s);   
  3. System.out.println(i);  

 

Exception in thread "main" java.lang.NumberFormatException: For input string: "112adf34516"
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source) 

另一种parseInt需要传入String 和int两个参数,parseInt(String s, int radix),使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字。这是一种将字符串数据按照某种进制进行转化的方法,当然前提条件是字符串中字符都满足进制的要求。

 

 

Java代码  收藏代码
  1. String s = "125ADF";  
  2.  int i = Integer.parseInt(s,16);   
  3. System.out.println(i);  

 

      输出结果:1202911

      异常情况就不再进行展示了。

      有将字符串转化为对应进制的整数的方法,也就有将整数按照进制转化为字符串的方法。

      toBinaryString、toOctalString、toHexString、toString都需要传入一个int,分别将该int的值转化为其二进制、八进制、十六进制、十进制的字符串,最高位不为0。

     

 

Java代码  收藏代码
  1. String s = Integer.toBinaryString(511);   
  2. System.out.println(s);  

 

      结果为:111111111

      以上几种方法就是在做Huffman编码的压缩时用到的Integer的方法,很有实用价值。

 

     除了这些基本数据类型的引用类型,我们最常接触到的有关数据操作的类就是String类。对于String型的数据,我们最常做的操作就是查找其中某个字符或者子字符串的索引位。这在String类中有很多的方法。Indexof(int char)返回的是指定字符在String中第一次出现的索引位,Indexof(int char,int fromIndex)则是从fromIndex位开始第一次出现char的索引位。lastIndexOf(int char)和lastIndexOf(int char,int fromIndex)正好相反,返回的是从尾到头的第一次出现的索引位。

 

 

Java代码  收藏代码
  1. String s = "adlfldcidfkasdcieij";   
  2. int index = s.indexOf("l");   
  3. int last = s.lastIndexOf("l");   
  4. System.out.println("index is :"+index);   
  5. System.out.println("last is :"+last);  

 

结果为:index is :2
          last is :4

       还经常会用到的操作就是截取字符串的某一段,得到新的字符串。String类中有substring的方法,同样也有重载现象存在。substring(int beginIndex)和substring(int beginIndex, int endIndex)得到的都是原字符串的子串,不过第一种是从beginIndex到原字符串尾,第二种则是从beginIndex到endIndex-1位的子串。这里就要注意,substring方法是含头不含尾的!

     

 

Java代码  收藏代码
  1. String s = "adlfldcidfkasdcieij";   
  2. String snew = s.substring(5);   
  3. String str = s.substring(5,s.length()-1);   
  4. System.out.println("snew is :"+snew);   
  5. System.out.println("str is :"+str);  

 

结果为:snew is :dcidfkasdcieij
            str is :dcidfkasdciei

 

请注意两个子串的区别。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值