内部声明的属性
jdk8中:
private final char value[]; //存储字符串数据的容器
> final : 指明此value数组一旦初始化,其地址就不可变。
jdk9开始:为了节省内存空间,做了优化
private final byte[] value; //存储字符串数据的容器。
String实例化的两种方式
第1种方式:String s1 = “hello”;
第2种方式:String s2 = new String(“hello”);
构造器
public String()
:初始化新创建的 String对象,以使其表示空字符序列。public String(String original)
: 初始化一个新创建的String
对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。public String(char[] value)
:通过当前参数中的字符数组来构造新的String。public String(char[] value,int offset, int count)
:通过字符数组的一部分来构造新的String。public String(byte[] bytes)
:通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。public String(byte[] bytes,String charsetName)
:通过使用指定的字符集解码当前参数中的字节数组来构造新的String。
String与Char[]之间的转换
@Test
public void test3() {
String s1 = "hello";
char[] chars = s1.toCharArray();
// System.out.println(chars);
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
}
String与byte[]之间的转换
@Test
public void test4() {
String s = "hello";
byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]); // 输出对应的ascii码
}
}
utf-8字符集中,一个汉字占用3个字节。
gbk字符集中,一个汉字占用2个字节。
byte[]转为String
String s1 = new String(bytes);
System.out.println(s1);
常用方法
(1)boolean isEmpty():字符串是否为空
(2)int length():返回字符串的长度
(3)String concat(xx):拼接
(4)boolean equals(Object obj):比较字符串是否相等,区分大小写
(5)boolean equalsIgnoreCase(Object obj):比较字符串是否相等,不区分大小写
(6)int compareTo(String other):比较字符串大小,区分大小写,按照Unicode编码值比较大小
(7)int compareToIgnoreCase(String other):比较字符串大小,不区分大小写
(8)String toLowerCase():将字符串中大写字母转为小写
(9)String toUpperCase():将字符串中小写字母转为大写
(10)String trim():去掉字符串前后空白符
(11)public String intern():结果在常量池中共享
(12)boolean contains(xx):是否包含xx
(13)int indexOf(xx):从前往后找当前字符串中xx,即如果有返回第一次出现的下标,要是没有返回-1
(14)int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
(15)int lastIndexOf(xx):从后往前找当前字符串中xx,即如果有返回最后一次出现的下标,要是没有返回-1
(16)int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
(17)char charAt(index):返回[index]位置的字符
(18)char[] toCharArray(): 将此字符串转换为一个新的字符数组返回
(19)static String valueOf(char[] data) :返回指定数组中表示该字符序列的 String
(20)static String valueOf(char[] data, int offset, int count) : 返回指定数组中表示该字符序列的 String
(21)static String copyValueOf(char[] data): 返回指定数组中表示该字符序列的 String
(22)static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String
(23)boolean startsWith(xx):测试此字符串是否以指定的前缀开始
(24)boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始
(25)boolean endsWith(xx):测试此字符串是否以指定的后缀结束
(26)String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 不支持正则。
(27)String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
(28)String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
(29)String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。