一、字符串构造与基本信息
方法 | 作用 | 示例代码 | 说明 |
---|---|---|---|
String() | 初始化空字符串 | String s1 = new String(); | 默认为空字符串 "" |
String(String original) | 克隆字符串 | String s2 = new String("Hello"); | 等效于直接赋值 |
length() | 返回字符串长度 | "Java".length() → 4 | 空串返回 0 |
isEmpty() | 判断是否为空字符串 | "".isEmpty() → true | 等效于 length() == 0 |
二、字符串转换与处理
方法 | 作用 | 示例代码 | 注意事项 |
---|---|---|---|
toLowerCase() | 转小写 | "HELLO".toLowerCase() → "hello" | 根据默认语言环境 |
toUpperCase() | 转大写 | "hello".toUpperCase() → "HELLO" | 同上 |
trim() | 去除首尾空格 | " java ".trim() → "java" | 无法去除中间空格 |
strip() | 去除首尾空白(含Unicode) | " Java\t".strip() → "Java" | Java 11+ 新增,替代 trim() |
replace(char old, char new) | 字符替换 | "hollo".replace('o', 'e') → "hello" | 全部替换,可链式调用 |
replaceAll(String regex, String replacement) | 正则替换 | "a1b2".replaceAll("\\d", "-") → "a-b-" | 正则表达式需正确转义(如\\d ) |
三、子串查找与截取
方法 | 作用 | 示例代码 | 关键说明 |
---|---|---|---|
charAt(int index) | 获取指定位置字符 | "Java".charAt(1) → 'a' | 索引从 0 开始,越界抛异常 |
indexOf(String str) | 查找子串首次位置 | "Java".indexOf("a") → 1 | 未找到返回 -1 |
lastIndexOf(String str) | 查找子串最后位置 | "Java".lastIndexOf("a") → 3 | |
substring(int begin) | 截取子串(至末尾) | "Hello".substring(2) → "llo" | 前闭后开区间(2 ≤索引< 结尾) |
substring(int begin, int end) | 截取子串 | "Hello".substring(1,4) → "ell" | 范围 [begin, end) |
contains(CharSequence s) | 是否包含子串 | "Java".contains("av") → true | 等效于 indexOf() != -1 |
startsWith(String prefix) | 是否以某前缀开头 | "file.txt".startsWith("file") → true | 可选起始位置参数 |
endsWith(String suffix) | 是否以某后缀结尾 | "file.txt".endsWith(".txt") → true |
四、字符串拆分与拼接
方法 | 作用 | 示例代码 | 注意事项 |
---|---|---|---|
split(String regex) | 按正则拆分数组 | "a,b,c".split(",") → ["a", "b", "c"] | 正则特殊字符需转义(如`\ |
join(CharSequence delimiter, CharSequence... elements) | 拼接字符串 | String.join("-", "2023", "12", "31") → "2023-12-31" | Java 8+ 支持,替代循环拼接 |
concat(String str) | 字符串拼接 | "Hello".concat(" World") → "Hello World" | 等效于 + ,但效率不高 |
五、字符串比较与格式化
方法 | 作用 | 示例代码 | 核心规则 |
---|---|---|---|
equals(Object obj) | 内容是否相等(区分大小写) | "Java".equals("java") → false | 必须为String类型,null 安全返回false |
equalsIgnoreCase(String another) | 无视大小写比较 | "Java".equalsIgnoreCase("java") → true | |
compareTo(String another) | 字典序比较 | "apple".compareTo("banana") → 负值 | 可用于排序,返回差值 |
format(String format, Object... args) | 格式化字符串 | String.format("PI: %.2f", Math.PI) → "PI: 3.14" | 类似 printf 语法 |
六、高级方法与最佳实践
-
类型转换:
valueOf()
:将其他类型转为字符串<JAVA>
String.valueOf(123); // "123" String.valueOf(true); // "true"
getBytes()
:字符串转字节数组(注意编码)<JAVA>
byte[] bytes = "Java".getBytes(StandardCharsets.UTF_8);
-
正则匹配:
matches(String regex)
:检查是否匹配正则<JAVA>
"123abc".matches("\\d+.*"); // true
-
字符串池与
intern()
:<JAVA>
String s1 = new String("Java"); // 堆中新对象 String s2 = s1.intern(); // 返回常量池引用
性能提醒与最佳实践
- 避免循环拼接字符串:使用
StringBuilder
或StringBuffer
(线程安全)。<JAVA>
StringBuilder sb = new StringBuilder(); for (int i = 0; i < 100; i++) { sb.append(i); } String result = sb.toString();
- 处理大文本文件:直接逐行读取,避免一次性加载到字符串。
- 优先用
equals()
比较内容:==
比较对象地址,可能导致逻辑错误。
通过掌握这些核心方法,可以高效处理各类字符串场景。根据需求选择最适合的方法,并注意字符串不可变性对性能的影响。