String类的常用方法
String类中的常用的方法:
- CharAt():获取单个字符,并且返回类型为 char;
- toCharArray():将String转为字符数组;
- toUpperCase():将字符串转化为大写;
- startsWith(“参数1”,参数2):当传入一个参数的时候是判断是不是这个字符开头的,当传入两个参数时,判断第[x]个字符是不是x,返回 booean;
- endsWith():判断字符串的结尾,返回结果为boolean;
- contains():查找字符串是否存在,返回boolean;
- indexOf():从头开始查找字符串,找到就返回0,否则就返回负1;
- subString():截取字符串(从下标开始截到尾部);
- split():拆分字符串;
- length():表示字符串的长度;
- isEmpty():判断字符串是否为空值。
方法的练习:
package zhai.string;
public class StringDemo3 {
public static void main(String[] args) {
String s = "xiaozhai";
// charAt():获取单个字符(填入具体的下标)
// 返回值是单个字符,所以使用 char 类型进行接收
char c = s.charAt(4);
System.out.println("通过charAt()获取单个字符:"+c);
// toCharArray():讲 String 字符串转为数组
char[] chars = s.toCharArray();
// 遍历数组 输出字符串中的所有数据 并使用空格隔开
for (int i = 0; i < chars.length ; i++) {
System.out.print(chars[i]+" ");
}
System.out.println();
System.out.println("通过toCharArray()方法转化为数组的结果是:"+new String(chars));
System.out.println("通过toUpperCase()方法把字符串转换为大写的格式:"+s.toUpperCase());
System.out.println("通过startsWith()传入一个参数的时候判断字符串是不是x开头的"+s.startsWith("x"));
System.out.println("通过startsWith()方法传入两个参数的时候判断第0个字符串是不是为x:"+s.startsWith("x",1));
System.out.println("通过endsWith()方法判断字符串是不是i结尾的:"+s.endsWith("i"));
System.out.println("通过contains()方法查找字符串是否存在:"+s.contains("c"));
int i = s.indexOf("e");
System.out.println("通过indexOf()方法从从第一个元素往后面查找"+i);
int i2 = s.lastIndexOf("x");
System.out.println("通过lastIndexOf()方法从最后一个元素开始往前查找:"+i2);
System.out.println("等等方法()....");
}
}
输出:
通过charAt()获取单个字符:z
x i a o z h a i
通过toCharArray()方法转化为数组的结果是:xiaozhai
通过toUpperCase()方法把字符串转换为大写的格式:XIAOZHAI
通过startsWith()传入一个参数的时候判断字符串是不是x开头的true
通过startsWith()方法传入两个参数的时候判断第0个字符串是不是为x:false
通过endsWith()方法判断字符串是不是i结尾的:true
通过contains()方法查找字符串是否存在:false
通过indexOf()方法从从第一个元素往后面查找-1
通过lastIndexOf()方法从最后一个元素开始往前查找:0
等等方法()....
String,StringBuilder,StringBuffer区别:
String
1、String类:创建操作字符串,它的内部实现也是一个字节数,这个数组是被 final 修饰的,因此String是不可变的对象,每次在对字符串类进行更改的时候都会生成一个新的字符串对象,然后将指针指向新的字符串对象。
StringBuilder
2、StringBuilder类:它和String不同的是,StringBulider类的对象能够被多次修改,并且不产生新的对象。这个特性的意义在于,如果我们进行大量的字符串操作,使用String类的话就会产生很大的消耗,而StringBuilder就可以避免这个问题;但是它的弊端就是线程不安全。
StringBuffer
3、StringBuffer类:它和StringBuilder之间最大的区别是StringBuilder的方法线程安全;由于StringBuilder执行效率高于StringBuffer和String,所以通常使用StringBuilder,但是程序要是要求线程安全的情况下,则必须使用StringBuffer类。
练习:
package zhai.string;
public class StringDemo4 {
public static void main(String[] args) {
// 使用 String 进行执行
int a = 100000;
long timeMillis = System.currentTimeMillis();
String s = "";
for (int i = 0; i <a; i++) {
s += i;
}
System.out.println("次数:"+a+" 耗时:"+(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < a ; i++) {
stringBuffer.append(i);
}
System.out.println("次数:"+a+" 耗时:"+(System.currentTimeMillis() - timeMillis));
timeMillis = System.currentTimeMillis();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < a ; i++) {
stringBuilder.append(i);
}
System.out.println("次数:"+a+" 耗时:"+(System.currentTimeMillis() - timeMillis));
}
}
输出:
次数:100000 耗时:18026 // String
次数:100000 耗时:16 // StringBuffer
次数:100000 耗时:0 // StringBuilder 执行效率
解析:很明显可以从代码执行结果得出,String执行最慢了而StringBuilder是执行最快的;注意:StringBuilder线程不安全但是效率高。