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<s.length();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 |
表示X可以出现恰好 n 次 |
| X |
表示X可以出现至少 n 次,也就是>=n次 |
| X |
表示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 |