Java中的String类
在 Java 中,String
类是非常基础且常用的一个类,用于表示不可变的字符序列。几乎所有处理文本的应用程序都会用到 String
类。以下是 String
类的一些关键特性与方法:
-
不可变性:一旦一个
String
对象被创建,其内容就不能改变。这保证了String
对象作为常量的安全性,可以在多线程环境中自由共享而无需担心线程安全性问题。 -
存储和优化:由于 String 的不可变性,Java 字符串池(String Pool)能够重用相同的
String
对象,从而节省内存。当创建字符串时,如果字符串字面量存在,JVM 将不会创建新对象,而是返回字符串池中的引用。 -
常见方法:
- length():返回字符串的长度。
- charAt(int index):返回指定索引处的字符。
- concat(String str):将指定字符串连接到此字符串的末尾。
- indexOf(String str):返回指定子字符串首次出现的位置。
- lastIndexOf(String str):返回指定子字符串最后一次出现的位置。
- substring(int beginIndex) 或 substring(int beginIndex, int endIndex):返回从指定位置开始的子字符串。
- equals(Object obj):比较两个字符串的内容是否相等。
- equalsIgnoreCase(String str):比较两个字符串的内容,忽略大小写。
- toUpperCase() 和 toLowerCase():将字符串转换为大写或小写。
- trim():删除字符串两端的空白字符。
-
构造函数:
String(char[] value)
:通过字符数组创建字符串。String(byte[] bytes, Charset charset)
:通过字节数组和字符集创建字符串。String(String original)
:复制现有字符串。
-
字符串字面量与加法运算:
使用双引号定义的字符串字面量创建的字符串会被放入字符串常量池。字符串加法运算(+
或+=
)在 Java 7 及更高版本中会自动调用StringBuilder
类来优化性能。
String
类的构造方法示例
-
使用字面量创建:
String str1 = "Hello";
-
使用
new
关键字创建:String str2 = new String("World");
-
使用字符数组创建:
char[] chars = {'H', 'e', 'l', 'l', 'o'}; String str3 = new String(chars);
-
使用字节数组创建:
byte[] bytes = {72, 101, 108, 108, 111}; // ASCII编码的 'Hello' String str4 = new String(bytes);
-
使用
String
构造函数从另一个String
对象创建:String str5 = new String(str1);
String
类的常见方法示例
-
拼接 (
concat()
,+
):String str6 = str1.concat(str2); String str7 = str1 + " " + str2; // 更常用的写法
-
长度 (
length()
):int len = str1.length();
-
查找子字符串 (
indexOf()
,lastIndexOf()
):int index = str1.indexOf("el"); int lastIndex = str1.lastIndexOf("l");
-
提取子字符串 (
substring()
):String part = str1.substring(1, 4);
-
比较 (
equals()
,equalsIgnoreCase()
):boolean equals = str1.equals(str1); boolean equalsIgnoreCase = str1.equalsIgnoreCase("hELLO");
-
转换大小写 (
toUpperCase()
,toLowerCase()
):String upperCase = str1.toUpperCase(); String lowerCase = str1.toLowerCase();
-
去除空白 (
trim()
):String trimmed = str1.trim();
-
替换 (
replace()
):String replaced = str1.replace('H', 'h');
-
分割 (
split()
):String[] words = str1.split("l");
-
字符获取 (
charAt()
):char ch = str1.charAt(0);
-
格式化 (
format()
):String formatted = String.format("%s %s", str1, str2);
完整示例代码
public class StringMethodsDemo {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
// 拼接
String str3 = str1.concat(str2);
System.out.println("Concatenation: " + str3);
// 长度
System.out.println("Length of str1: " + str1.length());
// 查找子字符串
int index = str1.indexOf("el");
System.out.println("Index of 'el': " + index);
// 提取子字符串
String subStr = str1.substring(1, 4);
System.out.println("Substring: " + subStr);
// 比较
boolean equal = str1.equals(str2);
System.out.println("Are str1 and str2 equal? " + equal);
// 转换大小写
System.out.println("UpperCase: " + str1.toUpperCase());
System.out.println("LowerCase: " + str1.toLowerCase());
// 去除空白
String trimmed = " Hello ".trim();
System.out.println("Trimmed: " + trimmed);
// 替换
String replaced = str1.replace('H', 'h');
System.out.println("Replaced: " + replaced);
// 分割
String[] splitArray = str1.split("l");
System.out.println("Split: ");
for (String s : splitArray) {
System.out.println(s);
}
// 字符获取
char ch = str1.charAt(0);
System.out.println("First char: " + ch);
// 格式化
String formatted = String.format("%s %s", str1, str2);
System.out.println("Formatted: " + formatted);
}
}