一、String类
String类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
String的底层其实是一个被final修饰的字符数组,部分源码如下:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
所以字符串对象一旦创建,是不可以改变的,如下:
@Test
public void Demo(){
//s 为字符串对象的引用,里面保存的时内存地址,可以改变! "abc"为字符串对象,不能改变。
String s = "abc";
}
二、String类的部分构造方法
//String(byte[] bytes) 传入一个字节数组,使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
@Test
public void test_01(){
byte[] bytes = {97,98,99,100};
String str = new String(bytes);
//打印abcd
System.out.println(str);
}
//第一个数代表起始索引,第二个代表转换的个数
@Test
public void test_02(){
byte[] bytes = {97,98,99,100};
String str = new String(bytes,2,1);
//打印c
System.out.println(str);
}
//String(char[] value) 分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。
@Test
public void test_03(){
char[] chars ={'a','b','c'};
String str = new String(chars);
//打印abc
System.out.println(str);
}
//第一个数代表起始索引,第二个代表个数
@Test
public void test_04(){
char[] chars ={'a','b','c'};
String str = new String(chars,1,1);
//打印b
System.out.println(str);
}
三、String类中的部分其他方法
//返回字符串的长度
@Test
public void test_01(){
String a = "abc";
int length = a.length();
System.out.println(length);
}
//返回指定索引处的char值
@Test
public void test_02(){
String a = "abc";
char c = a.charAt(0);
//打印为a
System.out.println(c);
}
//substring(int beginIndex, int endIndex) 获取字符串的一部分,返回新字符串;[0,2)不包含第二个索引位置
@Test
public void test_03(){
String a = "abc";
String s = a.substring(0, 2);
//打印为ab
System.out.println(s);
}
//substring(int beginIndex) 返回新字符串,包含给定索引位置,及其之后的全部字符
@Test
public void test_04(){
String a = "abc";
String s = a.substring(1);
//打印为bc
System.out.println(s);
}
//replaceAll(String regex, String replacement)返回新的字符串
// 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串
@Test
public void test_05(){
String a = "a,b,c";
String s = a.replaceAll(",", "-");
//打印为a-b-c
System.out.println(s);
}
//toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写
@Test
public void test_06(){
String a = "abc";
String s = a.toUpperCase();
//打印为ABC
System.out.println(s);
}
//startsWith(String prefix) 返回boolean值 测试此字符串是否以指定的前缀开始
@Test
public void test_07(){
String a = "abc";
boolean b = a.startsWith("b");
//打印为false
System.out.println(b);
}
//toCharArray() 将此字符串转换为一个新的字符数组
@Test
public void test_08(){
String a = "abc";
char[] chars = a.toCharArray();
}
四、StringBuffer类
线程安全的可变字符序列,可以创建字符串缓冲区对象,提高操作字符串的效率。
其中的一些方法实例:
//reverse() 将此字符序列用其反转形式取代
@Test
public void test_01(){
StringBuffer s = new StringBuffer();
StringBuffer reverse = s.append(1).append(2).append(3).reverse();
//打印结果为321
System.out.println(reverse);
}
//replace(int start, int end, String str) 使用给定 String 中的字符替换此序列的子字符串中的字符。
//[0,1) 右开区间,不包含给定的第二个索引位置的字符
@Test
public void test_02(){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = s1.append("asd");
StringBuffer s3 = s2.replace(0, 1, "b");
//打印结果为bsd
System.out.println(s3);
}
//delete(int start, int end) 移除此序列的子字符串中的字符。
//[0,1) 右开区间,不包含给定的第二个索引位置的字符
@Test
public void test_03(){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = s1.append("asd");
StringBuffer s3 = s2.delete(0, 1);
//打印结果为sd
System.out.println(s3);
}
//如果StringBuffer对象调用了toString方法,就会把可变的字符缓冲区对象变为不可变的String对象
@Test
public void test_04(){
StringBuffer s1 = new StringBuffer();
StringBuffer s2 = s1.append("asd");
String s3 = s2.toString();
}
五、StringBuilder类
此类与StringBuffer用法基本相同,但它是线程不安全的,效率比StringBuffer高。