Java中String类与StringBuffer类的实用操作
文章目录
String类:
String类的构造器:
public String();空构造 public String(byte[] bytes); //把字节数组转换成字符串 public String(byte[] bytes,int index,int length); //把字节数组的一部分转换成字符串,index 表示开始位置 public String(char[] arr); //把这个字符数组转换成字符串 public String(char[] arr,int index,int count); //字符数组从index开始转换成String字符转换count个String类方法:
需要掌握的方法:
byte[] arr = str.getBytes(); //把字符串转换成字节数组,输出的是码表值 char[] arr = str.toCharArray(); //将字符串转换成字符数组 String str = String.valueOf(arr); //将任意形态数组转换成字符串,是个静态的方法,用方法名调用 String str = String.valueOf(int i); //将int型数据转换成字符串 String str = String.valueOf(对象); //调用对象的toString方法,打印对象信息
字符串的替换与去除 String str = str1.replace('a','b'); //用b替换a String str = str.replace("ab","cd"); //用cd替换ab String str =str.trim(); //去除两端的空格 int num = str.compareTO(str2); //比较两个字符串,从左至右比较unicode表
判断类
str.equals(str2); //判断str1与str2是否相等,返回boolean str.equalsIgnoreCase(str2); //判断str1与str2是否相等,忽略大小写,返回boolean str.contains(str2); //判断大字符创中是否有包含有小字符串 str.stratsWith(str2); //判断字符串是否以某个字符串开头 str.endsWith(str2); //判断字符串是否以某个字符串结尾 str.isEmpty(); //判断字符串是否为空 空返回true
字符串的查找与截取
str.length(); //获得字符串的长度 char c = str.charAt(5); //根据索引获取字符串对应位置的字符。返回一个char. str.indexOf('a'); //根据char字符返回int型索引,如果不存在返回-1 str.indexOf("ab"); //根据字符串返回a的int型索引,如果不存在返回-1 str.indexof('a',3); //从指定位置开始,向后找。例:从索引3开始,往后找a str.lastIndexof('a'); //从后往前找 str.lastIndexof('a',7); //从指定索引向前找 str.substring(5); //从指定位置开始截取字符串,包含头,默认到末尾。需用新的字符串接收 str.substring(5,8); //从指定位置开始截取字符串,到指定的8,包含头,不包含尾
需了解的方法:
String str1 = str.toLowerCase(); //把字符串转成小写 String str1 = str.toUpperCase(); //把字符串转成大写 str1.concat(str2); //把字符串进行拼接,但只能字符串跟字符串拼接
StringBuffer类:
StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符组
当调用添加方法时,不会再重新创建对象,在不断的向原缓冲区添加字符。
StringBuffer是可变的字符序列
StringBuffer类的构造器:
StringBuffer sb = new StringBuffer(); //空参构造,创建一个默认长度为16的容器 StringBuffer sb = new StringBuffer(10); //单int型构造,10是容器的大小 StringBuffer sb = new StringBuffer("dsd"); //得到初始内容为dsd且长度为19的容器
StringBuffer类常用方法
//获取对象的容器大小
sb.length(); //得到的是容器中的字符个数,实际值 sb.capacity(); //得到的是容器的初始容量的大小。理论值。
//往StringBuffer数据类型中添加信息
sb.append(); //可以往括号里面添加任何类型的元素,但都是指向同一个对象,可以不需要新的变量来接收。 sb.insert(3,"dsd"); //在指定位置添加元素。例:在3索引的位置添加dsd,后面元素依次向后挪。
//删除元素
sb.deleteCharAt(); //根据索引,删除指定位置的元素 sb.delete(0,2); //根据索引,删除指定位置到指定位置的元素。删除的是包含头,不包含尾的元素 sb.delete(0,sb.length());//清空缓存区
//注意!返回值不在是StringBufferr本身,而是一个String类型。 String str =sb.substring(3); //从指定索引位置截取到末尾。 String str =sb.substring(1,5); //从指定索引位置截取到指定索引位置。也是含头,不含尾
//替换元素
sb.replace(0,3,"dsd"); //根据索引,替换元素。同样包含头,不包含尾。 sb.reverse(); //反转StringBuffer对象字符串
//String到StringBuffer的转换
StringBuffer sb = new StringBuffer("dsd"); //通过构造器,把字符串转换为StringBuffer对象。 sb.append("dsd"); //通过append方法把字符串传入无参构造器,转换为StringBuffer对象。
//StringBuffer到String的转换
String str = new String(sb); //通过String构造器传入一个StringBuffer对象,来转换 String str = sb.toString(); //调用toString方法,返回一个字符串 String str =sb.substring(0,sb.length()); //通过substring方法,截取全部,返回String类型
StringBuilder类:
StringBuilder和StringBuffer中的方法,构造器全部一致,区别只在于StringBuffer是线程安全的,StringBuilder是线程不安全的。
线程安全的话,效率会比较低。但是比较安全 线程不安全的话,效率会比较高,但是比较不安全。
两个小例子
例1:把一串字符串转变成第一个字符大写,其余小写的格式。
private static void startBingAndSmall() {
// 把一个字符串的首字母转换成大写,其余为小写。
// 链式编程,只要保证每次调用的方法返回的是对象,就可以继续调用。
String str = "caiXInSB";
String strStart = str.substring(0, 1);
String strThen = str.substring(1);
strStart = strStart.toUpperCase();
strThen = strThen.toLowerCase();
System.out.println(strStart + strThen);
}
例2:找出大字符串中的小字符串
方法1:使用substring方法
private static void findTheString() {
//找出大字符串中的小字符串
String str = "xuexi!woaixuexi,xuexiaiwo,wuluxuexiaibuaiwo,wodouaixuexi";
System.out.println("原字符串为:"+str);
int count = 0;
int index = 0; // 根据字符串返回a的int型索引,如果不存在返回-1
while((index = str.indexOf("xuexi")) !=-1){
str = str.substring(index+5); //从指定位置开始截取字符串,到指定的8,包含头,不包含尾
count++;
}
System.out.println("字符串中有"+count+"个“xuexi”");
}
方法2:使用正则表示式切割
使用正则 切割后得到的是剩余的元素,若需要得到切割了几次的信息,只需要在原字符串后面加个" "空格字符串,那么切割次数就会等于数组的长度减一。因为若是第一个元素是正则时,切割后都会返回一个空字符串给arr[0];若是最后一个元素是正则,则不后返回一个空字符串给数组的最后一位。所以可以自己加个空格字符串在最后,当正则在字符串的最后时,切割后都还有一个空格字符串。
private static void findTheString() {
//找出大字符串中的小字符串
String str = "xuexi!woaixuexi,xuexiaiwo,wuluxuexiaibuaiwo,wodouaixuexi";
System.out.println("原字符串为:"+str);
str += " ";
String[] arr = (str+" ").split("xuexi");
System.out.println(arr.length-1);
}