---------------------- android培训、java培训、期待与您交流! ----------------------
String类代表字符串,用于描述字符串事物,该类不能被继承。java程序中的所有字符串值(如“abc”)都作为此类的实例实现。字符串是常量,它们的值在创建后就不能更改,这是字符串的最大特点。
注意:定义语句String s1 = “abc”;其中s1是一个String类类型引用,而“abc”则是一个对象,如果s1 = “kk”,并不是“abc”被覆盖了,而是引用s1的内存地址值改变了,指向了“kk”对象了。
定义语句String s2 = new String(“abc”)和前一种方法使用是一样的,但还是会有区别,在String类中覆写了Object类的equals()方法,定义了自己独特的内容,该方法覆写之后用于判断字符串的内容是否相等。
另外这两个定义语句之间也有区别,前面一个只有一个引用指向“abc”,而后面的语句其实是有两个引用,一个是用new关键字定义出来的引用,它的内存地址值再赋给s2,结果是有两个引用都指向了“abc”这个字符串。
语句String s1 = “abc”和Strings2 = “abc”,s1和s2其实都是指向同一个对象的。因为String类是final类型的,不能被继承,所以它就提供了多个方法对字符串进行操作。
常见的操作如下:
获取操作
1.int length(),获取字符串的长度,返回值类型是int。
字符串中要获取长度是通过调用length()方法来完成的,它和获取数组的长度不一样,获取数组的长度是通过length这个属性来完成的,区别一个是length()方法,一个是length属性,这点要注意。
2.char charAt(int index),根据索引获取该位置上的某个字符,返回值类型是char。当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException(字符串角标越界异常)。
3.int indexOf(int ch),根据字符获取该字符在字符串中第一次出现的位置,接受的参数是字符的ASCII码值。该方法既可以判断,也可以获取。
4.int lastIndexOf(int ch),返回指定字符在此字符串中最后一次出现的索引。
判断操作
1.boolean contains(CharSequence s),判断字符串中是否包含某一个字符串,因为indexOf(String str)可以索引str第一次出现的位置,如果返回值是-1,表示该str不存在该字符串中。所以,该方法也可以用于判断是否包含指定字符串。
2. boolean isEmpty(),判断字符串中是否有内容,当且仅当length()为0时返回true。
3.boolean startswith(String prefix),判断字符串是否是以指定内容开头。
4.boolean endswith(String suffix),判断字符串是否是以指定内容结尾。
5.boolean equals(String str),覆写了Object类中的equals()方法,判断字符串内容是否相等。
6.boolean equalsIgnoreCase(String str),判断字符串内容是否相等,并忽略大小写。
转换操作
1.String(char[] value),将字符数组转换成字符串,该方法为构造方法,在初始化的时候就完成了转换操作。还有一个静态的方法也能完成该操作,那就是static String copyValueOf(char[] char)。
2.char[] toCharArray(),将字符串转换成字符数组,返回值类型为char类型的数组。
3.String(byte[] value),将字节数组转换成字符串。
4.byte[] getBytes(),将字符串转换成字节数组,返回值类型为byte类型的数组,注意,字符串和字节数组在转换过程中,是可以指定编码表的。
5.static String valueOf(int value),将基本数据类型转换成字符串。
替换操作
1.Stringreplace(char oldChar, char newChar),用newChar字符替换此字符串中出现的所有oldChar字符,返回值为String类型。如果要替换的字符串不存在,返回的仍是原来的字符串。
2.String replace(CharSequence target,CharSequence replacement),用指定字符串替换原字符串当中的所有匹配的目标子字符串。
切割操作
1.String[]split(String regex),将字符串按照指定参数regex拆分成字符串数组,参数regex属于字符串中的内容,注意:返回值为字符串数组。
2.String substring(int beginIndex),返回一个新字符串,它是此字符串的一个子字符串。返回的字符串从索引一直到结尾。
3.String substring(int beginIndex,intendIndex),返回一个新字符串,它是此字符串的一个子字符串。返回的字符串从开始索引一直到结束索引的前一个字符(既包含头,不包含结尾)。
大小写转换操作
1.String toUpperCase(),返回一个新的字符串,将原字符串全部转换成为大写。
2.String toLowerCase(),返回一个新的字符串,将字符串全部转换成为小写。
比较操作
1.int compareTo(String),按字典顺序依次比较两个字符串中的字符,该比较基于字符串中各个字符的Unicode值,返回的是参数字符和此字符的Unicode差值。
去除空格操作
1.String trim(),返回一个新的字符串,将原字符串两端的空格去除。
StringBuffer是字符串缓冲区,也是一个容器,它有以下特点:
1.它的长度是可变化的,
2.可以直接操作多个数据类型,
3.最终会通过toString()方法变成字符串。
StringBuffer类也是final的,不可以有子类。但是StringBuffer产生的对象是一个可变对象,当对它进行修改时不会像String那样重新建立对象,它只能通过构造方法来建立,或者调用append()方法,这是StringBuffer类和String类的主要区别之一。
比如有语句:
StringBuffer sb = new StringBuffer();
sb = “hello,java.”;//此处会报错
第二个赋值语句会报错,因为StringBuffer产生的对象不能通过赋值符号对它进行赋值。对象建立以后,在内存中就会分配内存空间,并初始化一个null。对对象赋值可以通过构造方法来赋值, StringBuffer sb = newStringBuffer(“hello,java.”),还可以调用它的append()方法对它进行赋值。比如
sb.append(“hello,java.”);
1.StringBuffer append(),赋值,将指定的数据作为参数添加到已有数据的结尾处。返回值类型为StringBuffer类对象。所以可以连续调用本类方法。比如
sb.append(“hello”).append(“java”).append(“hello”)…;
2.StringBuffer insert(int offset, boolean b),插入,在指定的offset位置处插入数据类型为boolean的内容。返回值类型扔为StringBuffer类对象。
1.StringBuffer delete(int start, int end),删除字符串缓冲区中的数据,包含start,但是不包含end。返回值为StringBuffer类对象。
2.StringBuffer deleteCharAt(int index),删除指定位置的字符。
3.Char charAt(int index),获取指定位置上的字符。返回值为Char类型数据。
4.StringBuffer replace(int start, int end,String str),用指定字符串str替换指定位置start和end之间的这段字符串,返回值类型是StringBuffer类对象。
5.void setCharAt(int index, char ch),用指定字符替换索引处的字符,注意:该方法返回的类型为空。
6.StringBuffer reverse(),将对象反转,返回值为StringBuffer。
7.void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin),将字符串缓冲区中的srcBegin到srcEnd指定数据存储到指定的字符数组dst中,从dstBegin处开始存储。
在JDK1.5之后出现了StringBuilder类。StringBuilder是一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer类的一个简易替换,用在字符缓冲区被单个线程调用的时候。
StringBuilder和StringBuffer的主要区别在于StringBuilder是线程不同步的,而StringBuffer是线程同步的。当程序是单线程程序的时候,最好使用StringBuilder类,因为StringBuffer既然是同步的,所以要判断监视器的状态,这样就会造成程序效率低。而StringBuilder则不需要判断监视器的状态。但是当程序是多线程程序时,就必须使用StringBuffer类了,因为StringBuilder的实例在多线程的情况下是不安全的。
另外,java的升级主要考虑三个方面,第一,就是提高效率;第二,简化书写;第三,提高安全性。
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。
基本数据类型包装类的最常见作用,就是用于基本数据类型和字符串类型之间的转换。
1.基本数据类型转换成字符串
有两种方法,第一种是:基本数据类型+“”;第二种是:基本数据类型.toString(基本数据类型值);比如:
Integer.toString(34);//将34整数变成“34”;
2.字符串转换成基本数据类型
有两种方法,第一种是:基本数据类型包装类.parseInt(String st)/parseLong(Stringstr)/…;比如:
int a = Integer.parseInt(“123”);//将字符串类型的123转换成整型数据123
第二种是先产生一个基本数据类型包装类对象,并初始化值,然后再调用intValue()方法转换成对应的数据类型,比如:
Integer i = new Integer(“123”);
i.intValue();
注意:parseInt()方法是静态的,但是intValue()方法是非静态的,需要被对象调用。
JDK1.5版本出现以后基本数据类型出现了一个新特性,可以直接定义语句Integer x= 4;这个时候,右边的“4”已经不在是整形数据,他会被虚拟机隐式转换成为Integer类对象。这个升级主要就是简化书写。而且这个对象还可以直接参与运算,比如:x= x + 2;参与运算的过程中,x又被隐式转换成为int类型,和2运算,之后,虚拟机又将和转换成为Integer类对象赋给x。
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima