String 类
String 类概述
定义与本质:
String 类是 Java 语言中的一个内置类,用于表示和操作字符串。在 Java 中,字符串是一个字符序列,是不可变对象,即一旦创建,其内容不能被修改。
存储机制:
字符串对象可以通过字符串字面量的形式创建,也可以使用 new 关键字通过构造函数创建。字符串字面量创建的字符串会存储在字符串常量池中,而通过 new 创建的字符串则在堆内存中。
功能特性:
提供了丰富的方法来操作字符串,如获取字符串长度、连接字符串、提取子串、查找字符或子串、替换字符或子串、比较字符串等。由于其不可变性,在多线程环境中可以安全地共享,且有利于字符串的缓存和复用,提高了内存利用效率和程序性能。
下面将详细讲解 String 类的使用。
创建 String 类对象
一般使用 String 类的构造方法创建一个字符串对象,可以生成一个空字符串,也可以由字符或字节数组生成字符串。以下是常用的一些方法:
- 创建一个空字符串
public String()
- 使用字符数组中的字符创建字符串
public String(char[] value)
- 使用字符数组中 offset 为起始下标,count 个字符创建一个字符串
public String(char[] value,int offset,int count)
- 使用指定的字节数组构造一个新的字符串,新字符串的长度与字符集有关,因此可能与字节数组的长度不同。 chatsetName 为使用的字符集名,如 US-ASCII、ISO-8859-1、UTF-8、UTF-16 等。如果使用了系统不支持的字符集,将抛出 UnsupportedEncodingException 异常
public String(byte[] bytes,String chatsetName)
- 使用一个字符串对象创建字符串
public String(String original)
- 使用 StringBuffer 对象创建字符串
public String(StringBuffer buffer)
- 使用StringBuilder对象创建字符串
public String(StringBuilder buffer)
以下是使用这些方法创建 String 类对象的代码示例:
import java.nio.charset.StandardCharsets;
public class CreateStringObject {
public static void main(String[] args) {
// 创建一个空字符串
String str = "";
System.out.println("创建一个空字符串:" + str);
// 使用字符数组中的字符创建字符串
char[] chr1 = {
'a','b','c','d'};
String str1 = new String(chr1);
System.out.println("使用字符数组中的字符创建字符串:" + str1);
//使用字符数组中offset为起始下标,count个字符创建一个字符串
char[] chr2 = {
'a','b','中','国','牛','逼','c','d'};
String str2 = new String(chr2, 2, 4);
System.out.println("使用字符数组中offset为起始下标,count个字符创建一个字符串:" + str2);
// 使用指定的字节数组构造一个新的字符串
byte[] byteArray = {
72, 101, 108, 108, 111};
String str3 = new String(byteArray, StandardCharsets.UTF_8);
System.out.println("使用 UTF-8 字符编码构造的字符串: " + str3);
// 使用一个字符串对象创建字符串
String str4 = new String(str2);
System.out.println("使用一个字符串对象创建的字符串: " + str4);
// 使用StringBuffer对象创建字符串
StringBuffer buffer = new StringBuffer("World");
String str5 = new String(buffer);
System.out.println("使用StringBuffer对象创建的字符串: " + str5);
// 使用StringBuilder对象创建字符串
StringBuilder builder = new StringBuilder("Java");
String str6 = new String(builder);
System.out.println("使用StringBuilder对象创建的字符串: " + str6);
}
}
程序运行结果如下:
创建一个空字符串:
使用字符数组中的字符创建字符串:abcd
使用字符数组中offset为起始下标,count个字符创建一个字符串:中国牛逼
使用 UTF-8 字符编码构造的字符串: Hello
使用一个字符串对象创建的字符串: 中国牛逼
使用StringBuffer对象创建的字符串: World
使用StringBuilder对象创建的字符串: Java
字符串基本操作
在学习字符串基本操作之前,首先了解一下字符串在内存中的表示。以下是创建一个字符串对象的代码示例:
String str = new String("Java is cool");
该字符串对象在内存中的状态如下图所示:
该字符串共包含 12 个字符,即长度为 12,其中每个字符都有一个下标,下标从 0 开始,可以通过下标访问每个字符。
注意:在字符串中,空格也占有内存空间。
接下来将学习字符串的一些基本操作,调用 String 类的方法操作字符串:
- 返回字符串的长度,即字符串包含的字符个数
public int length()
- 从字符串的下标 beginIndex 开始到 endIndex 结束产生一个子字符串
public String substring(int beginIndex,int endIndex)
- 从字符串的下标 beginIndex 开始到结束产生一个子字符串
public String substring(int beginIndex)
- 将字符串转换成大写字母
public String toUpperCase()
- 将字符串转换成小写字母
public String toLowerCase()
- 返回删除了前后空白字符的字符串对象
public String trim()
- 返回该字符串是否为空
public boolean isEmpty()
- 将调用字符串与参数字符串连接起来,产生一个新的字符串
public String concat(String str)
- 将字符串中的所有 oldChar 字符改为 newChar 字符,返回一个新的字符串
public String replace(char oldChar,char newChar)
- 返回字符串中指定位置的字符
public char charAt(int Index)
- 将参数的基本类型double值转换为字符串
public static String valueOf(double d)
以下是使用这些基本操作的代码示例:
public class StringBasicOperations {
public static void main(String[] args) {
String str = " Java is cool ";
System.out.println("创建了一个字符串对象 str :" + str);
System.out.println();
// 返回字符串的长度,即字符串包含的字符个数
int length = str.length();
System.out.println("字符串 str 的长度为:" + length);
System.out.println();
// 从字符串的下标 beginIndex 开始到 endIndex 结束产生一个子字符串
String str1 = str.substring(1, 5);
System.out.println("从字符串 str 的下标 5 开始到 7 结束产生的子字符串 str1 为:" + str1);
System.out.println();
// 从字符串的下标 beginIndex 开始到结束产生一个子字符串
String str2 = str.substring(5);
System.out.println("从字符串 str 的下标 5 开始到结束产生一个子字符串 str2 为:" + str2);
System.out.println();
// 将字符串转换成大写字母
String str3 = str.toUpperCase();
System.out.println("将字符串 str 转换成大写字母:" + str3);
System.out.println();
// 将字符串转换成小写字母
String str4 = str.toLowerCase();
System.out.println("将字符串 str 转换成小写字母:" + str4);
System.out.println();
// 返回删除了前后空白字符的字符串对象
String str5 = str.trim();
System.out.println("字符串 str 删除前后空白字符为:" + str5);
System.out.println();
// 返回该字符串是否为空
boolean result = str.isEmpty();
System.out.println("字符串 str 是否为空::" + result);
System.out.println();
// 将调用字符串与参数字符串连接起来,产生一个新的字符串
String str6 = str1.concat(str2);
System.out.println("将字符串 str1 和 str2 连接产生的新字符串 str6 为:" + str6);
System.out.println();
// 将字符串中的所有 oldChar 字符改为 newChar 字符,返回一个新的字符串
String str7 = str4.replace('o', 'O');
System.out.println("将字符串 str4 中的小写o全部改成大写O:" + str7);
System.out.println();
// 返回字符串中指定位置的字符
char chr = str.charAt(6);
System.out.println("返回字符串 str 中索引为 6 的字符:" + chr);
System.out.println();
// 将参数的基本类型double值转换为字符串
double num = 3.14;
String str8 = String.valueOf(num);
System.out.println("转换后的字符串: " + str8);
System.out.println("转换后的字符串类型: " + str8.getClass().getName());
}
}
程序运行结果如下:
创建了一个字符串对象 str : Java is cool
字符串 str 的长度为:14
从字符串 str 的下标 5 开始到 7 结束产生的子字符串 str1 为:Java
从字符串 str 的下标 5 开始到结束产生一个子字符串 str2 为: is cool
将字符串 str 转换成大写字母: JAVA IS COOL
将字符串 str 转换成小写字母: java is cool
字符串 str 删除前后空白字符为:Java is cool
字符串 str 是否为空::false
将字符串 str1 和 str2 连接产生的新字符串 str6 为:Java is cool
将字符串 str4 中的小写o全部改成大写O: java is cOOl
返回字符串 str 中索引为 6 的字符:i
转换后的字符串: