------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、概述
String类适用于描述字符串事物,提供了多个方法对字符串进行操作。
特点:字符串一旦被初始化就不可以被改变,存放在方法区中的常量池中。
实例代码1:
String s1="abc";//s1指向的内存中只有一个对象abc
String s2 = new String("abc");//s2指向的内容中有两个对象abc、new
System.out.println(s1==s2);
//false,s1创建后,是在字符串常量池中创建了一个"abc"字符串对象。
//而s2是在堆内存中创建了另外一个"abc"字符串对象。所以,两个对象不是同一个对象。
System.out.println(s1.equal(s2));
//true,字符串中equals比较的是字符串的内容是否相同
实例代码2:
String s1 = "abc";
s1 = "kk"//输出结果s1=kk
//因为s1变量储存的地址变了,指向了kk,abc继续留在在内存中
二、字符串的方法
1、获取
1.1获取字符串长度
int length();
1.2根据位置获取指定的字符
char charAt(int index);//当访问到字符串不存在的角标时会发生角标越界异常
1.3获取指定字符的位置。如果不存在返回-1,所以可以通过返回值-1来判断某一个字符不存在的情况。既可以判断是否存在又可以获取位置。
int indexOf(int ch);//返回第一次找到的字符角标
int indexOf(int ch,int fromindex);//返回从指定位置开始第一次找到的角标
int indexOf(String str);//返回第一次找到的字符串角标
int indexOf(String str,int fromIndex)//返回从指定位置开始,第一次找到str的位置
int lastindexOf(int ch);//反向索引
2、判断
2.1字符串中包含指定的字符串吗?
boolean contains(String substring);
2.2字符串是否以指定字符串开头?
boolean startsWith(string);
2.3字符串是否以指定的字符串结尾?
boolean endsWith(string);
2.4判断字符串是否相同
boolean equals(string);//覆盖了Object中的方法,判断字符串内容是否相同。
2.5判断字符串内容是否相同,忽略大小写。
boolean equalsignoreCase(string);
2.6判断字符串中是否有内容
boolean isEmpty();//原理就是判断长度是否为0。
3、转换
3.1通过构造函数将数组转换成字符串
new String (char[]);
new String (char[],offset,count);//将字符数组中的一部分转成字符串,offset是开头,count是转换的个数
3.2通过字符串中的静态方法,将字符数组转成字符串。
static String copyValueOf(char[]);
static String copyValueOf(char[],int offset,int count);
static String ValueOf(char[]);
static String ValueOf(char[],int offset,int count);
3.3将基本数据类型或者对象转成字符串。
String valueOf(char);
String valueOf(boolean);
String valueOf(double);
String valueOf(float);
String valueOf(int);
String valueOf(long);
String valueOf(Object);
3.4将字符串转成数组
char[] toCharArray();//转成字符数组
byte[] getBytes();//可以加入编码表,转成字节数组。
4、切割
String[] split(分割的规则-字符串)
5、替换//修改后变成新的字符串,并不是在原字符串直接修改。
String replace(oldChar,newChar);
String replace(oldstring.newstring);
6、子串,获取字符串中的一部分
String substring(int start);//从start位开始,到lengt()-1为止
String substring(int start,int end);//从start开始,到end为止,包含头不包含尾
7、转换,去空格,比较
7.1将字符串转成大小写
String toLowerCase();
String toupperCase();
7.2去除字符串两端空格
String trim();
7.3对两个字符串进行自然顺序的比较
int compareTo();//如果参数字符串等于此字符串,则返回值为0;如果此字符串按字典顺序小于字符串参数,则返回一个小于0的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于0的值。
三、StringBuffer字符串缓冲区
StringBuffer概述:StringBuffer就是字符缓冲区,用于储存数组。初始容量为16个字符。
特点:长度可变,可以储存任意类型的数据,最终需要变成字符串
功能:
1、添加
StringBuffer append(data);在缓冲区尾部追加数据
StringBuffer insert(index,data);在指定位置插入数据
2、删除
StringBuffer delete(start,end);删除start到end-1范围的元素
StringBuffer deleteCharAt(index);删除指定位置的元素
sb delete(0,sb.length);//清空缓冲区
3、修改
StringBuffer replace(start,end,string);将start到end-1替换成string
void setCharAt(index,char);替换指定位置的字符
void setLength(len);将原字符串置为指定长度的字符串
4、查找(找不到返回-1)
int indexOf(string);返回指定字符串在此字符串中第一次出现处的索引。
int intdexOf(string,int fromindex);从指定位置开始查找字符串。
int lastindexOf(string);返回指定字符串在此字符串中最右处出现处的索引。
int lastintdexOf(string,int fromindex);从指定位置开始反向查找字符串。
5、获取子串
string substring(start);返回start到结尾的子串,角标不存在会出现字符串角标越界
string substring(start,end);返回start至end-1的子串,包含头不包含尾
6、反转
StringBuffer reverse();字符串反转
什么时候用StringBuffer?
当数据类型不确定,数据个数不确定,且最终变成字符串时使用StringBuffer
四、StringBuilder字符缓冲区
在JDK1.5之后出现了StringBuilder功能和StringBuffer一模一样
StringBuffer和StringBuilder的区别:
StringBuffer线程安全,适用于多线程操作。
StringBuilder线程不安全,适用于单线程操作,效率高。
开发建议使用StringBuilder。
JDK升级一般的目的
简化书写,提高效率,增加安全性
五、基本数据类型包装类
按照面向对象思想将基本数据类型封装成了对象
好处:
1、可以通过对象中的属性和行为操作基本数据
2、可以实现基本数据类型和字符串之间的转换
关键字 对应的类名
byte Byte
short Short
int Integer
long Long
fliat Float
double Double
char Character
Boolean Boolean
基本数据类型对象包装类:都有XXX parseXXX方法
有一个类型没有parse方法:Character
将一个Integer对象转成基本数据类型值并调用对象的方法intValue();
将十进制整数转成其他进制:
String toBinaryString(int i);转成二进制
String toOctalString(int i);转成八进制
String toHexString(int i);转成十六进制
String toString(int i,int radix);
其他进制转成十进制:
parseInt(string,radix);
补充:
Integer x=128;
Integer y=128;
System.out.println(m==n);//false
Integer m=127;
Integer n=127;
System.out.println(m==n);//true
//在装箱时,如果数值在byte范围内,那么数值相同,不会产生新的对象,也就是说多个数值相同的引向的是同一个对象。