在Java编程中,字符串是最常用也是最基础的数据类型之一。本文将全面介绍Java字符串的各种操作方法和技巧,帮助开发者提升编码效率和程序性能。
一、Java字符串基础
Java中的字符串是通过String类实现的,它是一个不可变(immutable)的对象。这意味着一旦创建,字符串内容就不能被修改。这种设计带来了线程安全性和缓存优化的优势。
1.1 字符串创建方式
Java中有两种创建字符串的基本方式:
// 方式一:直接赋值
String str1 = "Hello Java";
// 方式二:通过构造方法
String str2 = new String("Hello Java");
这两种方式在内存分配上有重要区别:直接赋值会检查字符串常量池,而new操作会强制创建新对象。
二、常用字符串操作方法
2.1 字符串长度与空值检查
获取字符串长度使用length()方法:
String str = "Java";
int len = str.length(); // 返回4
检查字符串是否为空有两种方式:
// 方式一:检查长度
boolean isEmpty = str.length() == 0;
// 方式二:使用isEmpty()方法
boolean isEmpty = str.isEmpty();
2.2 字符串连接
Java提供了多种字符串连接方式:
// 方式一:使用+运算符
String result = "Hello" + " " + "Java";
// 方式二:使用concat()方法
String result = "Hello".concat(" Java");
// 方式三:使用StringBuilder(高性能场景推荐)
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" Java");
String result = sb.toString();
三、字符串比较
3.1 equals()与==的区别
String str1 = "Java";
String str2 = new String("Java");
System.out.println(str1 == str2); // false,比较对象引用
System.out.println(str1.equals(str2)); // true,比较内容
3.2 compareTo()方法
compareTo()方法按字典顺序比较字符串:
String str1 = "apple";
String str2 = "banana";
int result = str1.compareTo(str2); // 返回负数,因为apple在banana之前
四、字符串查找与截取
4.1 查找字符或子串
String str = "Java Programming";
// 查找字符位置
int index = str.indexOf('a'); // 返回1
// 查找子串
int index = str.indexOf("Pro"); // 返回5
4.2 字符串截取
String str = "Hello Java";
// 从指定位置截取到末尾
String sub1 = str.substring(6); // 返回"Java"
// 截取指定范围
String sub2 = str.substring(0, 5); // 返回"Hello"
五、字符串转换
5.1 大小写转换
String str = "Java";
String upper = str.toUpperCase(); // "JAVA"
String lower = str.toLowerCase(); // "java"
5.2 与其他类型转换
// 数字转字符串
String numStr = String.valueOf(123);
// 字符串转数字
int num = Integer.parseInt("123");
六、字符串分割与合并
6.1 split()方法
String str = "apple,orange,banana";
String[] fruits = str.split(","); // 分割为数组
6.2 join()方法(Java8+)
String joined = String.join("-", "Java", "is", "great"); // "Java-is-great"
七、正则表达式处理
Java字符串支持强大的正则表达式操作:
String str = "abc123xyz";
// 匹配
boolean matches = str.matches("[a-z]+"); // false
// 替换
String replaced = str.replaceAll("\\d", "#"); // "abc###xyz"
八、性能优化技巧
8.1 StringBuilder vs StringBuffer
- StringBuilder:非线程安全,性能更高
- StringBuffer:线程安全,性能稍低
8.2 字符串拼接优化
避免在循环中使用+拼接字符串:
// 不推荐
String result = "";
for (int i = 0; i < 100; i++) {
result += i; // 每次循环创建新对象
}
// 推荐
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i);
}
String result = sb.toString();
九、Java 11+新特性
9.1 isBlank()方法
" ".isBlank(); // true,只包含空白字符
" ".isEmpty(); // false,长度不为0
9.2 lines()方法
String str = "line1\nline2\nline3";
str.lines().count(); // 返回3
十、常见面试题解析
- String、StringBuilder和StringBuffer的区别?
- 为什么String设计为不可变?
- 如何高效反转字符串?
- 字符串常量池的工作原理?
- 如何检查两个字符串是否是字谜(anagram)?
通过本文的系统学习,相信你已经掌握了Java字符串的核心知识和高级技巧。在实际开发中,根据具体场景选择合适的方法,并注意性能优化,将大大提升你的代码质量。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。