上一篇
Java如何提取字符串?
- 后端开发
- 2025-06-13
- 2242
在Java中获取字符串的主要方式包括:直接使用双引号创建字面量(如
String s = "Hello"
)、通过
new String()
构造函数实例化、使用字符数组或字节数组转换(如
new String(charArray)
)、调用
toString()
方法转换对象,以及通过
StringBuilder
或
StringBuffer
动态构建字符串,字符串池机制优化了字面量的存储效率。
在Java中,“获取字符串”通常涉及两个层面:一是创建或初始化字符串对象(即获取字符串本身),二是从现有字符串中提取特定内容(如子字符串或字符),以下从专业角度详细说明:
创建字符串(获取字符串对象)
Java提供了多种初始化字符串的方式:
-
直接赋值(最常用)
利用双引号创建字符串常量,JVM会检查字符串常量池,避免重复创建:String str1 = "Hello Java"; // 从常量池获取
-
通过构造函数
使用new
关键字创建新对象(堆内存中):String str2 = new String("Hello Java"); // 新建独立对象
-
从字符数组/字节数组转换
适用于处理原始二进制数据或字符序列:char[] charArray = {'J', 'a', 'v', 'a'}; String str3 = new String(charArray); // 输出 "Java" byte[] byteArray = {74, 97, 118, 97}; String str4 = new String(byteArray, StandardCharsets.UTF_8); // 输出 "Java"
-
使用
StringBuilder
或StringBuffer
需高效拼接字符串时(如循环操作):StringBuilder sb = new StringBuilder(); sb.append("Hello").append(" Java"); String str5 = sb.toString(); // 输出 "Hello Java"
从字符串中提取内容
获取子字符串
-
substring(int beginIndex)
从指定索引到字符串末尾:String str = "Hello Java"; String sub1 = str.substring(6); // 输出 "Java"
-
substring(int beginIndex, int endIndex)
截取[beginIndex, endIndex)
范围的子串:String sub2 = str.substring(0, 5); // 输出 "Hello"
获取单个字符
charAt(int index)
返回指定索引处的字符:char ch = str.charAt(4); // 输出 'o'(索引从0开始)
按分隔符拆分字符串
split(String regex)
根据正则表达式拆分字符串为数组:String data = "apple,orange,banana"; String[] fruits = data.split(","); // 数组 ["apple", "orange", "banana"]
正则表达式匹配提取
Pattern
和Matcher
类
提取符合规则的子串:import java.util.regex.*; String text = "Phone: 123-456-7890"; Pattern pattern = Pattern.compile("\d{3}-\d{3}-\d{4}"); Matcher matcher = pattern.matcher(text); if (matcher.find()) { String phone = matcher.group(); // 输出 "123-456-7890" }
关键注意事项
- 字符串不可变性
Java中的字符串一旦创建不可修改,每次操作(如拼接、替换)都会生成新对象,频繁修改时应使用StringBuilder
。 - 索引边界检查
使用charAt()
或substring()
时需确保索引有效(0 ≤ index < length()
),否则抛出StringIndexOutOfBoundsException
。 - 编码问题
字节数组转字符串时需明确字符集(如UTF-8
),避免乱码:String str = new String(byteArray, "UTF-8");
应用场景建议
- 创建字符串 → 优先选择直接赋值(节省内存)。
- 提取固定位置内容 → 用
substring()
或charAt()
。 - 解析结构化文本 → 结合
split()
或正则表达式。 - 动态构建字符串 → 必用
StringBuilder
(线程安全用StringBuffer
)。
引用说明基于Oracle官方Java文档(Java SE 17),参考《Java核心技术卷I》及Java语言规范(JLS),字符串操作相关方法详见
java.lang.String
类API文档。