Java 基础 - Java 核心类库 - String 类
1 String 类的概念
java.lang.String类用于描述字符串,Java程序中所有字符串文字都为该类的实例
该类由final关键字修饰,表示该类不能被继承
从jdk1.9开始该类的底层不使用char[]来存储数据,而是改成 byte[]加上编码标记,从而节约了一些空间
该类描述的字符串内容是个常量不可更改,因此可以被共享使用
private final byte[] value ,fianl修饰指向的位置不会改变,byte[] 数组声明以后长度不会再改变
因为字符串是常量通过直接量赋值,所以存在内存中的方法区
String s1 = "abc"; //abc这个字符串是常量不可改变
s1 = "cde"; //将cde的地址赋值给s1变量 改变的是s1的指向并没有改变指向的内容
1.1 常量池
于String类型描述的字符串内容是常量不可改变
此Java虚拟机将首次出现的字符串放入常量 池中
之后再使用相同字符串,则直接使用池中已有的字符串对象而无需申请内存及创建对 象,从而提高了性能
1.2 常用构造方法
方法
说明
String()
使用无参方式构造对象得到空字符序列
String(byte[] bytes, int offset, int length)
使用bytes数组中下标从offset位置开始的length个字节来 构造对象
String(byte[] bytes)
使用bytes数组中的所有内容构造对象
String(char[] value, int offset, int count)
使用value数组中下标从offset位置开始的count个字符来构 造对象
String(char[] value)
使用value数组中的所有内容构造对象
String(String original)
根据参数指定的字符串内容来构造对象,新创建对象为参 数对象的副本
"" 表示空字符串对象,有对象只是对象里面没有内容 - null 空,对象都没有
byte[] 数组构建字符串先将每个整数翻译成对应的字符,再将所有字符串起来
char[] 数组构建字符串将字符穿起来组成
1.2.1 相关考点
//1. 下面代码会创建几个对象? 分别存放在什么地方?
String s1 = "hello"; //一个对象, 存放在方法区中常量池
String s2 = new String("helo"); //两个对象,一个在常量池一个在堆区
//2. 常量池与堆区对象比较
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
.equals 比较内容均为 true
s1 == s2 // true
s3 == s4 // false
s2 == s4 // false
//3. 常量优化机制
Stirng s1 = "abcd";
String s2 = "ab" + "cd";
s1 == s2 // true
// 变量没有优化机制
String s3 = "ab";
String s4 = s3 + "cd"; //s3为变量,并不是两个常量
s1 == s4 // false
//4. 实现字符串"12345" 向整数 12345 的转换
Integer.parseInt("12345")
//'1' - '0' = 1, '2' - '0' = 2
String s = "12345";
int ib = 0;
for(i=0;i
ib = ib*10 + (s.charAt(i) - '0');
}
//5. 回文的判断
String s = "上海自来水来自海上";
int len = s.length();
for (int i = 0; i < len/2; i++) {
if (s.charAt(i) != s.charAt(len-i-1)){
System.out.println("不是回文");
return; //结束方法
}
}
System.out.println("是回文");
1.3 常用的成员方法
方法
说明
String toString()
返回字符串本身
byte[] getBytes()
字符串拆分成字符再转换为byte数组并返回
char[] toCharArray()
用于将当前字符串内容转换为char数组并返回
char charAt(int index)
于返回字符串指定位置的字符
int length()
返回字符串字符序列的长度
boolean isEmpty()
判断字符串是否为空
int compareTo(String anotherString)
于比较调用对象和参数对象的大小关系,先比较每个字符的大小,如果都相等再比较字符长度
int compareToIgnoreCase(String str)
不考虑大小写比较
String concat(String str)
用于实现字符串的拼接
boolean contains(CharSequence s)
用于判断当前字符串是否包含参数指定的内容,charsequence接口的实现类有String, StringBuilder, StringBuffer
String toLowerCase()
返回字符串的小写形式
String toUpperCase()
返回字符串的大写形式
String trim()
返回去掉前导和后继空白的字符串
boolean startsWith(String prefix)
判断字符串是否以参数字符串开头
boolean startsWith(String prefix, int toffset)
从指定位置开始是否以参数字符串开头
boolean endsWith(String suffix)
判断字符串是否以参数字符串结尾
boolean equals(Object anObject)
用于比较字符串内容是否相等并返回
int hashCode()
获取调用对象的哈希码值
boolean equalsIgnoreCase(String anotherString)
用于比较字符串内容是否相等并返回,不考虑大小写
int indexOf(int ch)
用于返回当前字符串中参数ch指定的字符第一次出现的 下标
int indexOf(int ch, int fromIndex)
用于从fromIndex位置开始查找ch指定的字符,包含该位置
int indexOf(String str)
在字符串中检索str返回其第一次出现的位置,若找不到 返回-1
int indexOf(String str, int fromIndex)
表示从字符串的fromIndex位置开始检索str第一次出现 的位置
int lastIndexOf(int ch)
用于返回参数ch指定的字符最后一次出现的下标
int lastIndexOf(int ch, int fromIndex)
用于从fromIndex位置开始查找ch指定字符出现的下标
int lastIndexOf(String str)
返回str指定字符串最后一次出现的下标
int lastIndexOf(String str, int fromIndex)
用于从fromIndex位置开始反向搜索的第一次出现的下 标
String substring(int beginIndex, int endIndex)
返回字符串中从下标beginIndex(包括)开始到 endIndex(不包括)结束的子字符串
String substring(int beginIndex)
返回字符串中从下标beginIndex(包括)开始到字符串结尾 的子字符串
2 正则表达式
该字符串通常使用^运算符作为开头标志,使用$运算符作为结尾标志,当然也可以省 略
2.1 正则表达式常用规则
正则表达式
说明
[abc]
可以出现a、b、c中任意一个字符
[^abc]
可以出现任何字符,除了a、b、c的任意字符
[a-z]
可以出现a、b、c、……、z中的任意一个字符
[a-zA-Z0-9]
可以出现az、AZ、0~9中任意一个字符
.
任意一个字符(通常不包含换行符)
\d
任意一个数字字符,相当于[0-9]
\D
任意一个非数字字符
\s
空白字符,相当于[\t\n\x0B\f\r]
\S
非空白字符
\w
任意一个单词字符,相当于[a-zA-Z_0-9]
\W
任意一个非单词字符
X?
表示X可以出现一次或一次也没有,也就是0 ~ 1次
X*
表示X可以出现零次或多次,也就是0 ~ n次
X+
表示X可以出现一次或多次,也就是1 ~ n次
X{n}
表示X可以出现恰好 n 次
X{n,}
表示X可以出现至少 n 次,也就是>=n次
X{n,m}
表示X可以出现至少 n 次,但是不超过 m 次,也就是>=n并且<=m次
2.2 常用方法
方法
说明
boolean matches(String regex)
判断当前正在调用的字符串是否匹配参数指定的正则表达式规 则
String[] split(String regex)
参数regex为正则表达式,以regex所表示的字符串为分隔 符,将字符串拆分成字符串数组
String replace(char oldChar, char newChar)
使用参数newChar替换此字符串中出现的所有参数 oldChar
String replaceFirst(String regex, String replacement)
替换此字符串匹配给定的正则表达式的第一个子字符串
String replaceAll(String regex, String replacement)
将字符串中匹配正则表达式regex的字符串替换成 replacement