Java 中 String 的知识点

Java 中 String 的知识点

1. String 的创建与初始化

1.1 创建字符串对象

在Java中,可以通过字符串字面值或使用构造方法创建字符串对象。

// 使用字符串字面值创建字符串对象
String str1 = "Hello, World!";

// 使用构造方法创建字符串对象
String str2 = new String("Hello, World!");

1.2 字符串字面值和 new 关键字的区别

  • 字符串字面值创建的字符串对象在字符串常量池中,而使用 new 关键字创建的对象在堆内存中。
  • 字符串字面值具有自动优化的特性,相同字面值的字符串对象在常量池中是唯一的。

2. 字符串的不可变性

2.1 不可变性概念

String 类的对象一旦创建就是不可变的,即无法直接修改字符串的内容。

String original = "Hello";
String modified = original.concat(", World!"); // 创建新的字符串对象

// original 仍然是 "Hello"
// modified 是 "Hello, World!"

2.2 字符串操作不影响原始对象

所有字符串操作方法都返回新的字符串对象,而不修改原始对象。

String original = "Hello";
String concatResult = original.concat(", World!");

// original 仍然是 "Hello"
// concatResult 是 "Hello, World!"

3. 字符串常量池

3.1 常量池概念

字符串常量池是存储字符串字面值的特殊区域,可以通过 intern() 方法将字符串对象添加到常量池中。

String str1 = "Hello";
String str2 = new String("Hello").intern(); // 将字符串对象添加到常量池中

// str1 和 str2 指向字符串常量池中同一个对象

4. 字符串操作方法

4.1 常见操作方法

掌握常见的字符串操作方法,如拼接、截取、查找、替换等。

String concatResult = str1.concat(", World!"); // 拼接字符串
String substringResult = str1.substring(0, 3); // 截取子串
int index = str1.indexOf("lo"); // 查找子串的位置
String replaceResult = str1.replace('l', 'L'); // 替换字符

// 操作后原始字符串 str1 不变

5. 字符串比较

5.1 equals() 方法

学习如何使用 equals() 方法进行字符串内容比较。

String str1 = "apple";
String str2 = "banana";

boolean isEqual = str1.equals(str2); // 内容比较

5.2 compareTo() 方法

了解 compareTo() 方法的使用,以及如何进行字典顺序比较。

String str1 = "apple";
String str2 = "banana";

int compareToResult = str1.compareTo(str2); // 字典顺序比较

6. 字符串格式化

6.1 使用 String.format 方法

学会使用 String.format 方法进行字符串格式化。

String formattedString = String.format("Hello, %s! Today is %dth day.", "John", 20);
System.out.println(formattedString);

7. 正则表达式与字符串

7.1 使用正则表达式

熟悉如何使用正则表达式进行字符串匹配和替换。

String pattern = "Java";
String text = "Java is fun!";

Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(text);

boolean isFound = matcher.find(); // 判断是否匹配

7.2 字符串分割

了解 split() 方法的使用,将字符串分割为数组。

String sentence = "Java is a programming language";
String[] words = sentence.split(" ");

// words 数组为 ["Java", "is", "a", "programming", "language"]

8. StringBuilder 与 StringBuffer

8.1 StringBuilder 概述

StringBuilder 类是可变的字符序列,用于处理大量字符串操作时提供了更好的性能,因为它允许修改其内容。

8.2 特性

  • 可变性: StringBuilder 对象的内容可以被修改。
  • 非线程安全: StringBuilder 不是线程安全的,不适用于多线程环境。
  • 性能: 适用于大量字符串操作,因为它避免了不必要的对象创建。

8.3 示例

StringBuilder stringBuilder = new StringBuilder("Hello");
stringBuilder.append(" World");

8.4 StringBuffer 概述

StringBuffer 类与 StringBuilder 类类似,也是可变的字符序列,但是它是线程安全的,适用于多线程环境。

8.5 特性

  • 可变性: StringBuffer 对象的内容可以被修改。
  • 线程安全: StringBuffer 是线程安全的,适用于多线程环境。
  • 性能:StringBuilder 稍慢,因为它包含同步机制以确保线程安全。

8.6 示例

StringBuffer stringBuffer = new StringBuffer("Hello");
stringBuffer.append(" World");

总结

  • 使用 String 当需要不可变性,适用于少量字符串操作或字符串常量的情况。
  • 使用 StringBuilder 当需要可变性,适用于单线程环境,且对性能要求较高。
  • 使用 StringBuffer 当需要可变性且线程安全,适用于多线程环境。

选择合适的字符串处理类取决于具体的需求和性能要求。

9. 编码与字符集

9.1 字符编码和字符集

了解字符串的编码和字符集概念,学习如何在不同的字符集之间转换字符串。

String utf8String = "你好";
byte[] utf8Bytes = utf8String.getBytes(StandardCharsets.UTF_8); // 转换为UTF-8编码的字节数组

String newString = new String(utf8Bytes, StandardCharsets.UTF_8); // 从字节数组解码为字符串

10. Java 11+ 中的新特性

10.1 isBlank()

Java 11 引入了 isBlank() 方法,用于检查字符串是否为空白(只包含空格、制表符、换行符等),替代了传统的 trim().isEmpty() 操作。

String str = "  ";
boolean isBlank = str.isBlank(); // 返回 true

10.2 lines()

lines() 方法将字符串拆分为行,返回一个由行组成的流(Stream)。

String multilineString = "Line 1\nLine 2\nLine 3";
List<String> lines = multilineString.lines().collect(Collectors.toList());
// lines 包含 ["Line 1", "Line 2", "Line 3"]

10.3 repeat(int count)

repeat(int count) 方法用于复制字符串指定次数,简化字符串重复操作。

String repeatedString = "abc".repeat(3); // 返回 "abcabcabc"

10.4 strip(), stripLeading(), stripTrailing()

strip() 方法去除字符串首尾空白,stripLeading()stripTrailing() 分别去除开头和结尾的空白。

String str = "   Java 11   ";
String stripped = str.strip(); // 返回 "Java 11"

10.5 lines().forEach()

结合 lines()forEach(),可以更便捷地遍历字符串的行。

String multilineString = "Line 1\nLine 2\nLine 3";
multilineString.lines().forEach(System.out::println);
// 输出:
// Line 1
// Line 2
// Line 3

这些新特性使得在 Java 11 及更高版本中使用 String 类更加灵活和简便。

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值