String的构建
-
String类的概述
String类代表字符串。java中所以字符串的字面值都作为此类的实例实现。
字符串在JVM中是以常量方式存储,他们的值在创建后不能更改,只能被覆盖 。
String类是java中非常重要的引用数据类型,几乎所有数据都可以用String进行表示。 -
String类的构造器
public String():无参构造器,只用于创建一个String对象,是一个空串
public String(byte[] bytes):以byte型数组为参数,构建一个字符串对象,byte型数组的元素应是字符型,不然会出现垃圾字符
public String(char[] chars):以char型数组为参数,构建一个字符串对象
public String(byte[] bytes,int offset,int count):以
byte型数组为参数,构建一个字符串对象,但具有一定的格式,即以offset为起点,以count为长度,构建一个字符串对象
public String(char[] chars,int offset,int count):以char型数组为参数,构建一个字符串对象,但具有一定的格式,即以offset为起点,以count为长度,构建一个字符串对象
publlic String (String str):以字符串str为参数,构建一个字符串对象,将数据类型的str转化为引用类型
public String(StringBuffer buffer):以StringBuffer对象buffer为参数,构建一个字符串,与一般字符串对象的区别在于以这种构造器构造的字符串可以修改
String str = new String();//构建无参构造器
/*
* 以byte数组为参数
*/
byte []bytes = {'1','2','3'};//这里需要注意编码,当bytes为整型数时,由于编码格式的差异会出现垃圾字符
String str2 = new String(bytes);//第一种
String str3 = new String(bytes,1,1);//第二种,从索引为1开始,将1个字符存入str3中
/*
* 以char数组为参数
*/
char []chars = {'I','l','o','v','e','C','h','i','n','a'};
String str4 = new String(chars);//第一种
String str5 = new String(chars,1,4);//第二种,从索引为1开始,将4个字符存入str5中
/*
* 以字符串为参数
*/
String str6 = new String("I am a Chinese");
/*
* 以StringBuffer对象为参数
*/
StringBuffer str8 = new StringBuffer("I love China");//这里str8可以调用StringBuffer类中的方法,可以更改StringBuffer的对象,达到一个类似的更改字符串的目的
String str7 = new String(str8);
String类常用方法(一)
- public char charAt(int index):根据索引index返回字符串中的某个字符
- public int compareTo(String target):根据ASCII码的值与字符串target作比较,从第一个字符开始,相等则往后比,返回调用者与target的差值
- public boolean equals(String target):从Object继承并重写的方法,判断是否与字符串target的字符序列相等,并不是判断是否是同一对象(判断是否是同一对象是需要使用全等号==)
- public boolean equalsIgnoreCase(String target):与equals方法类似,但这里是指忽略大小写之后进行比较,即A与a相同
- public boolean endsWith(String suffix):是否以字符串suffix为后缀
- public boolean startsWith(String prefix):是否 以字符串prefix为前缀
String str = new String("IloveChina");
/*
* 根据索引返回目的字符
*/
char destination = str.charAt(1);//返回索引为1的字符,输出为l,越界会报错
/*
* 字符串比较
*/
int res = str.compareTo("iloveChina");//比较I与i,小了32,所以输出值为-32
int res2 = str.compareTo("ILoveChina");//这里第一位相同,则比较第二位,比较l与L,大了32,所以输出值为32
int res3 = str.compareTo("IloveChina");//两者完全相同,所以输出值是0
/*
* 字符串判断是否相等
*/
boolean bool = str.equals("IloveChina");//两者字符序列相同,输出为true
boolean bool2 = str=="IloveChina";//两者并非同一对象,输出为false
/*
* 忽略大小写,字符判断
*/
boolean bool3 = str.equalsIgnoreCase("ilovechina");//忽略了大小写形式的差异,输出为true
/*
* 判断是否为前缀或后缀
*/
boolean bool4 = str.endsWith("ina");//以ina结尾,输出为true
boolean bool5 = str.startsWith("I");//以 I开头,输出为true
String类常用方法(二)
- public String trim():去除字符串前后的空格并返回,这是返回了一个新的字符串,而不是更改了原来的字符串
- public int indexOf(int ch):在字符串中查找字符 ch返回索引,找不到则返回-1
- public int indexOf(int ch,int fromIndex):在字符串中,从第fromIndex个字符开始查找字符ch,返回索引,找不到则返回-1
- public int indexOf(String target):在字符传查找字符串target,返回target第一个字符在调用者中的索引,找不到则返回-1
- public int indexOf(String target,int fromIndex):在字符串中,从第fromIndex个字符开始查找字符串target,返回target第一个字符在调用者中的索引,找不到则返回-1
- public int length():返回字符串的长度
String str = new String(" IloveChina ");
/*
* 去除空格
*/
String str2 = str.trim();//仅能去除前后的空格,而不是中间的
/*
* 查找字符与字符串
*/
int i = str.indexOf('l');//查找字符l,返回值为2
int i2 = str.indexOf('l', 2);//从第七个字符开始,查找字符l,返回值为2
int i3 = str.indexOf("lo");//查找字符串lo,返回值为2
int i4 = str.indexOf("lo",2);//从第二个字符开始,查找字符串lo,返回首字符索引2
/*
* 求字符串长度
*/
int length = str.length();//返回str长度14
String类常用方法(三)
- public String[] split(String regex):将字符串以regex字符串分割为字符数组并返回,作为分割的字符串舍弃
- public String substring (int beginIndex):从beginIdex开始提取数组
- public String substring(int beginIndex,int endIndex):从beginIndex开始提取数组以endIndex结束,endIndex舍弃
- public char[] toCharArray():将字符串转化为字符数组
- public String toLowerCase():将字符串所有大写字符转化为小写
- public String toUpperCase():将字符串所有小写字符转化为大写
String str = new String("Java,Python,C,C#,C++,PHP");
/*
* 分割字符串
*/
String strs[] = str.split(",");//将每个字符串以','分割,存入数组
/*
* 提取字符串
*/
String str2 = str.substring(5);//从索引为5的字符开始提取字符串
String str3 = str.substring(5, 11);//从索引为5的字符开始提取字符串到索引为10停止提取,索引为10的字符舍弃不提取
/*
* 字符串类型转换
*/
char chrs[] = str.toCharArray();//将字符串转化为字符数组
String str4 = str.toLowerCase();//将字符串转化为小写
String str5 = str.toUpperCase();//将字符串转化为大写
StringBuilder概述
一个可变的非线程安全的安全序列,它与StringBuffer基本类似,但StringBuffer是线程同步的。在不涉及到多线程的应用中通常使用此类,因为它的执行效率要比StringBuffer更高 。在允许对某字符进行原字符序列进行更改是时应该首选此类,如果涉及到多线程中建议使用StringBuffer。
StringBiuder构造器
- public StringBuilder():构建一个空的、可修改的字符串序列
- public StringBuilder(int capacity):构建一个空的、可修改的字符串序列,StringBuilder默认是一个大小为16个字节的字符数组,这里为StringBuider构造了一个缓冲区的大小capacity
- public StringBuilder(String str):使用一个已知的字符串构建一个StringBuilder对象
- public StringBuider(CharSequence seq):使用一个CharSequence对象seq构建一个StringBuilder对象
/*构建一个StringBuilder对象*/
StringBuilder builder = new StringBuilder();
/*构建一个StringBuilder对象并设置了缓冲区大小*/
StringBuilder builder2 = new StringBuilder(1);
/*以字符串为参数构建一个StringBuilder*/
StringBuilder builder3 = new StringBuilder("IamaChinese");
StringBuilder类的常用方法
- public StringBuilder append(Object obj):追加数据,将任意类型作为参数,链接到末尾
- public StringBuilder delete(int start,int end):删除字符序列,以索引start开始,end索引结束,end保留
- public StringBuilder deleteCharAt(int index):删除索引index所指向的一个字符
- public StringBuilder insert(int offset,Object obj):插入字符序列,将任意类型作为参数,从索引offset插入字符序列
- public StringBuilder replace(int start,int end,String str):替换字符序列,以索引start开始,索引end结束,end保留,将字符串str替换该段字符序列
- public StringBuilder reverse():翻转字符序列
- public void setLength(int newLength):改变长度,将newLength长度的字符序列保留,其余舍弃
- public void setCharAt(int index,char ch):替换某一个字符,在索引index出将ch字符替换原有字符
/*追加数据*/
builder.append("hijklmn");//在builder后追加hijklmn,追加后builder变为abcdefghijklmn
/*删除数据*/
builder.delete(7, 14);//删除索引7-13的字符序列,删除后builder变为abcdefg
builder.deleteCharAt(0);//删除索引为0的字符,删除后builder变为bcdefg
/*插入数据*/
builder.insert(1, "hijklmn");//将hijklmn从索引为1的位置插入builder,插入后builder变为bhijklmncdefg
/*替换数据*/
builder.replace(1, 8, "abcdefg");//从索引为1开始,索引为8结束将abcdefg替换原有 字符,替换后builder变为babcdefgcdefg
builder.setCharAt(0, 'a');//将索引为0的字符替换为a,替换后builder变为aabcdefgcdefg
/*翻转数据*/
builder.reverse();//将字符序列前后翻转,翻转后builder变为gfedcgfedcbaa
/*改变长度*/
builder.setLength(3);//改变序列长度为3,即仅保留三个字符,其余舍弃,改后builder变为gfe