------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
String类及StringBuffer和StringBuilder概述和功能
一、String类
字符串是一个特殊的对象。
只要是双引号括起来的,都是一个字符串对象,如:”abc”,”3344”,这都属于字符串对象。String s = “abc”; s类类型变量,”abc”是一个对象。
String类中有很多够着函数,有空参数的构造函数,也有有参数的构造函数。这样看来,
String s = new String();
String s1 =””;
这两个方式其实是一样的,当然第二个方法更为方便。
字符串一旦初始化就不可以被改变。
String s = “abc”;
s = “aaaa”;
这里,不要以为原有字符串改变了,”abc”并没有变,变化的是s变量的指向,它指向了一个新的字符串对象。再看下面的代码:
String s1 = "abc";
Strings2 = new String("abc");
上面两者的是有区别的,s1在内存中有一个对象,s2中在内存中有两个对象。但是s1和s2的地址不同,如果用equals方法比较的话,结果却是true。因为String类复写了Object的 equals方法,比较的是字符串中的内容是否相同。
字符串是在常量池中的,所以一个字符串对象是单一的,比如:
String s1 ="abc";
Strings2 = "abc";
其中s2不会在创建一个新的字符串,而是指向原有的字符串。
二、String中的常用方法
1、 获取
1.1 获取字符串长度 int length()
1.2 根据位置获取位置上某个字符 char charAt(int index)
1.3 根据字符获取该字符在字符串中的位置
int indexOf(int ch) 这里注意传入的是ASCII码。返回的是ch在字符串中第一次出现的位置。
int indexOf(int ch , int formIndex ) 从formIndex位置开始,返回ch在字符串中的出现的位置。
int indexOf(String str) 这里注意传入的是ASCII码。返回的是str在字符串中第一次出现的位置。
int indexOf(String str , int formIndex ) 从formIndex位置开始,返回str在字符串中的出现的位置。
相应的如果前面加上last,比如lastIndexOf,就是获取最后一次出现的位置。
上述方法中,如果没有要找的字符或字符串,那么就会返回-1
2、 判断
2.1 字符串中是否包含某一个子串
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现的位置,如果返回-1,则表示该str不再字符串中,所以也可以用于判断是否包含。
if(str.indexOf(str)!=-1)
而且该方法即可以判断是否存在,又可以判断位置。
2.2 字符串中是否有内容
boolean isEmpty() 这里其实就是判断length()是否为零。(1.6才有)。
2.3 字符串中是否以指定内容开头
boolean startsWith(Stringstr);
2.4字符串发是否以指定内容结尾
booleanendsWith(String str);
2.5判断字符串内容是否相同,复写了Object类中的equals方法
boolean equals(str);
2.6 判断内容是否相同,并忽略大小写
booleanequalsIgnoreCase(str);
3、 转换
3.1 将字符数组转成字符串
构造函数:String(char[]);将字符数组转成字符串
String(char[ ] ch ,int offset , int count);将字符数组的一部分转成字符串,从offse值开始,长度为count值。
静态方法:
static String copyVauleOf(char[ ] ch)
static String copyVauleOf(char[ ] ch ,int offse , int count)
static String vauleOf(char[ ] ch)
3.2 将字符串转成字符数组
char[] toCharArray()将字符串变成字符数组
3.3将字节数组转成字符串
String(byte[] b);
String(byre[] int offset ,int count)
3.4将字符串转成字节数组
byte[] getBytes()
3.5 将基本数据类型转成字符串
String valueOf (int);
String valueOf (double);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的,有这个方法、
4、 替换
String replace (char oldchar , charnewchar) 替换字符
如果要替换的字符不存在,则返回的是原来的字符串。
String replace (oldstr , newstr ) 替换字符串
5、 切割
String [ ] split(regex); 把一个字符串,以regex隔开,分成一个字符串数组。
6、 获取字符串的字串
String substring(begin)
String substring(begin ,end);注意,这个截取的是只包含头,不包含尾。
7、 转换,去除空格
7.1 将字符串转成大写或者小写
StringtoUpperCase();
StringtoLowerCase();
7.2 将字符串两端的多个空格去除
Stringtrim();
7.3 对两个字符串进行自然顺序比较
intcompareTo(str);这个要注意,两字符串相等返回为0,大于返回大于0的参数,小于返回小于0的参数,一句Unicode
StringBuffer和StringBuilder
一、StringBuffer
StringBuffer是一个容器,可以对字符串内容进行增删,很多方法与String方法一致,StringBuffer长度是可变的。
操作方法:当然最先都要建立对象。
1、 存储
1.1 StringBuffer append(数据):将制定数据作为参数添加到已有数据的结尾处。返回时Stringbuffer对象。注意数据中,接收除byte、short意外的其他基本类型,可接受字符串,数组类的只接收char类型数组,接受对象和其他Stringbuffer对象。
1.2 StringBuffer insert(index,数据):可以将数据插入指定位置。
2、删除
StringBufferdelete(int start , int end):从指定位置删除数据,含头不含尾。
StringBufferdeleteCharAt(int index):删除指定位置的字符
2、 获取
char charAt(int index)
int indexOf(String str)
int length()
String substring(int start ,int end)这里注意,也是返回的String类型
3、 修改
StringBuffer replace(start , end ,str);
void setCharAr(ine index , char ch)这里注意,没有返回类型
4、 反转
StringBuffer reverse();
5、void getChar(intsrcBegin , int srcEnd , char[ ] dst , int dstBegin):将缓冲区中的指定字符存到目标字符数组中
总结:
1) StringBuffer长度是可变化的
2) 可以操作多个数据类型
3) 最终通过toString方法变成字符串。
二、StringBuilder
这类是被用作StringBuffer的简易替换,不保证同步。JDK1.5特性
StringBuilder是线程不同步的
StringBuffer是线程同步的
开发建议使用StringBuilder。
基本数据类型对象
一、基本数据类型包装类
java中可以把基本数据类包装成类,这样就可以用对象的方法对基本数据类型进行操作。
每个基本数据类型都有对应的包装类,比如byte Byte ,int Integer。。。。。。我们以Ingeter为例。
基本数据类型对象包装类的最常见的作用,就是用于基本数据类型和字符串类型之间的做转换。
1、基本数据类型转换成字符串:基本数据类型+””
基本数据类型.toString(基本数据类型);
如:Integer.toString(99),将99转换成字符串”99”。
2、字符串转成基本数据类型
以Integer为例:int num =Integer.parseInt ( “123456”),这样就把字符串”123456”转变成十进制的123456
3、十进制转换成其他进制
toBinaryString()
toHexString()
toOctalString()
4、其他进制转换成十进制
praseInt(String ,radix)注意,这里传入的radix是进制数,如2,8,10,16,前面的字符串是对应后面的进制的。
二、JDK1.5新特性
基本数据类型的拆箱与装箱
Integer a = 4;这里就会把4自动装箱为Integer对象
System.out.println(a+5);这里就会把Integer对象a,进行拆箱和5相加;
-128~127
在这个范围内,相同数字装箱对应的对象只有一个。程序如下:
Integer i1 = 13;
Integer i2 = 13;
System.out.println(i1==i2);
结果是 true
注意一点,byte中自动装箱对象一样,但是用到new Integer(13)和new Integer(13),就是两个对象了。