String 类详解
重点是练方法的使用,不用去深究方法的实现。
简述
String 类又称作不可变字符序列。
String 位于 java.lang 包中,Java 程序默认导入 java.lang 包下的所有类。
Java 字符串是 Unicode 字符序列,例如:"Java" 即是 4 个 Unicode 字符 ‘J’、‘a’、‘v’、‘a’ 组成的。
Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义的类 String,每个用双引号括起来的字符串都是 String 类的一个实例。
代码示例
(1)String 类的简单使用
String e = "";//空字符串
String greeting = "helloworld!";
(2)字符串连接
String s1 = "Hello!";
String s2 = "World!";
String s = s1 + "," + s2;
注意点
Java 允许使用符号 "+",把两个字符串连接起来。
在 "+" 运算符两侧的操作数中,只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串,然后再进行连接。
字符串相等判断
用双引号包裹起来的字符串, 比如 "abcdefg",都是在方法区的常量值位置存放。
符号 “==” :用于比较是否是同一个对象,如果不是,则值为 false
equals() 方法:比较两个字符串对象包含的字符是否一样,用 equals() 方法
代码示例:测试字符串相等判断
package cn.jungle.test.String;
// 测试字符串相等判断
public class Test01 {
public static void main(String[] args) {
String str1 = new String("abcdefg");
String str2 = "abcdefg";
// == 符号用于比较两个对象是否相等,下方的 str1 和 str2 内存地址不相等,所以 false
System.out.println(str1 == str2); // false
System.out.println(str1); // abcdefg
System.out.println(str2); // abcdefg
// 涉及字符串比较的时候,都用 equals 方法:比较两个字符串对象包含的字符是否一样
System.out.println(str1.equals(str2)); // true
}
}
String类的常量池(了解)
- 全局字符串常量池(String Pool)
全局字符串常量池中存放的内容是在类加载完成后存到 String Pool 中的,在每个 VM 中只有一份,存放的是字符串常量的引用值(在堆中生成字符串对象实例)。
- class 文件常量池(Class Constant Pool)
class 常量池在编译时每个 class 都会有,在编译阶段,存放的是常量(文本字符串、final 常量等)和符号引用。
- 运行时常量池(Runtime Constant Pool)
运行时常量池是在类加载完成之后,将每个 class 常量池中的符号引用值转存到运行时常量池中,也就是说,每个 class 都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。
String 类常用方法(掌握)
charAt(int index)
返回值类型为 char
返回字符串中第 index 个字符 。
length()
返回类型为 int
返回字符串的长度。
equals(String other)
返回值类型为 boolean
如果字符串与 other 相等,则返回 true,否则返回 false。
equalsIgnoreCase(String other)
返回值类型为 boolean
如果字符串与 other 相等(忽略大小写),则返回 true;否则返回 false。
indexOf(String str)
返回值类型为 int
返回从头开始查找第一个子字符串 str 在字符串中的索引位置。
如果未找到子字符串 str,则返回 -1
lastIndexOf()
返回值类型为 int
返回从末尾开始查找第一个子字符串 str 在字符串中的索引位置。
如果未找到子字符串 str,则返回 -1
replace(char oldChar,char newChar)
返回一个新字符串,它通过用 newChar 替换此字符串中出现的所有 odlChar 而生成。
可以替换一个字符,也可以替换一堆字符。
startsWith(String prefix)
返回值类型为 boolean
如果字符串以 prefix 开头,则返回 true。
endsWith(String prefix)
返回值类型为 boolean
如果字符串以 prefix 结尾,则返回 true。
substring(int beginIndex)
返回值类型为 String
返回一个新字符串,该串包含从原始字符串 beginIndex 索引位置到串尾。
substring(int beginIndex,int endIndex)
返回值类型为 String
返回一个新字符串,该串包含从原始字符串 beginIndex 索引位置到串尾或者到 endIndex-1 索引位置的所有字符串。
toLowerCase()
返回值类型为 String
返回一个新字符串,该串将原始字符串中所有的大写字母改为小写字母。
toUpperCase()
返回值类型为 String
返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母。
trim()
返回值类型为 String
返回一个新字符串,该串删除了原始字符串头部和尾部的空格。
代码示例:String 类常用方法
package cn.jungle.test.String;
// 测试 String 类的常用方法
public class Test02 {
public static void main(String[] args) {
String str1 = "阿jun修炼手册";
String str2 = "阿jun";
String str3 = "阿jUN"; // 用于与 str2 比较
String str4 = "阿jun没对象!";
// charAt(int index) 方法:找到并输出对应索引的字符,索引从 0 开始
System.out.println(str1.charAt(0)); // 阿
System.out.println(str1.charAt(6)); // 手
// length() 方法:输出字符串的长度
System.out.println(str1.length()); // 8
// 取字符串的最后一个字符
System.out.println(str1.charAt(str1.length()-1)); // 册
// equals(String other) :比较两个字符串对象的字符串内容是否相等
System.out.println(str1.equals(str2)); // false
// equalsgnoreCase(String other):比较两个字符串对象的字符串是否相等,忽略大小写
System.out.println(str2.equalsIgnoreCase(str3)); // true
// indexOf(String str):返回从头开始查找第一个子字符串 str 在字符串中的索引位置。如果未找到子字符串 str,则返回 -1
System.out.println(str1.indexOf("u")); // 2
System.out.println(str1.indexOf("UN")); // -1
System.out.println(str1.indexOf("jun")); // 1
// lastIndexOf():返回从末尾开始查找第一个子字符串 str 在字符串中的索引位置。如果未找到子字符串 str,则返回 -1
System.out.println(str1.lastIndexOf("u")); // 2
System.out.println(str1.lastIndexOf("手")); // 6
System.out.println(str1.lastIndexOf("U")); // -1
// replace(char oldChar,char newChar):返回一个新字符串,它通过用 newChar 替换此字符串中出现的所有 odlChar 而生成。可以替换一个字符,也可以替换一堆字符。
System.out.println(str4.replace("没对象!","修炼手册")); // 阿jun修炼手册 ,其中可以替换一个字符,也可以替换一堆字符。
// 可以替换一个字符,也可以替换一堆字符。
System.out.println(str4.replace("!",",他应该快有对象了吧!,现在是2021年11月24日22:21"));
// startsWith(String prefix):如果字符串以 prefix 开头,则返回 true
System.out.println(str1.startsWith("阿jun")); // true
System.out.println(str1.startsWith("jun")); // false
// endsWith(String prefix):如果字符串以 prefix 结尾,则返回 true
System.out.println(str1.endsWith("手册")); // true
System.out.println(str1.endsWith("有手就行!")); // false
System.out.println("有手就行!".endsWith("行不行")); // false ,也可以直接使用字符串去调用 String 类方法
// substring(int beginIndex):返回一个新字符串,该串包含从原始字符串 beginIndex 索引位置到串尾。
System.out.println(str1.substring(4)); // 修炼手册
System.out.println(str1.substring(0)); // 阿jun修炼手册
// substring(int beginIndex,int endIndex):返回一个新字符串,该串包含从原始字符串 beginIndex 索引位置到串尾或者 endIndex-1 索引位置的所有字符串。
System.out.println(str1.substring(0,4));// 阿jun
System.out.println(str1.substring(4,str1.length()));// 修炼手册
// toLowerCase():返回一个新字符串,该串将原始字符串中所有的大写字母改为小写字母。
System.out.println("阿JUN".toLowerCase()); // 阿jun
// toUpperCase():返回一个新字符串,该串将原始字符串中的所有小写字母改成大写字母。
System.out.println("阿jun".toUpperCase()); // 阿JUN
// trim():返回一个新字符串,该串删除了原始字符串头部和尾部的空格。
String str5 = " 阿 jun 修炼手册 ";
System.out.println(str5.trim()); // 阿 jun 修炼手册
// 去除所有空格,trim() 方法和 replace() 方法搭配着来
System.out.println(str5.trim().replace(" ","")); // 阿jun修炼手册
}
}