Java字符串常规操作案例
字符串声明与初始化
// 直接赋值
String str1 = "Hello World";
// 通过new关键字创建
String str2 = new String("Hello World");
// 字符数组转字符串
char[] charArray = {'H', 'e', 'l', 'l', 'o'};
String str3 = new String(charArray);
// 字节数组转字符串
byte[] byteArray = {72, 101, 108, 108, 111};
String str4 = new String(byteArray);
字符串长度与判断
String str = "Hello Java"; // 获取字符串长度 int length = str.length(); // 10 // 判断是否为空 boolean isEmpty = str.isEmpty(); // false // 判断是否空白 boolean isBlank = str.isBlank(); // false
字符串比较
String str1 = "Hello";
String str2 = "hello";
String str3 = "Hello";
// equals() - 区分大小写比较
System.out.println(str1.equals(str2)); // false
System.out.println(str1.equals(str3)); // true
// equalsIgnoreCase() - 忽略大小写比较
System.out.println(str1.equalsIgnoreCase(str2)); // true
// compareTo() - 字典序比较
System.out.println(str1.compareTo(str2)); // 负数(H < h)
System.out.println(str1.compareTo(str3)); // 0
// == 比较引用地址(不推荐用于内容比较)
System.out.println(str1 == str3); // true(字符串常量池)
System.out.println(str1 == new String("Hello")); // false
字符串查找
String str = "Hello Java Programming";
// indexOf() - 查找字符/字符串第一次出现的位置
int index1 = str.indexOf('o'); // 4(从0开始)
int index2 = str.indexOf("Java"); // 6
int index3 = str.indexOf("Python"); // -1(未找到)
// lastIndexOf() - 查找最后一次出现的位置
int index4 = str.lastIndexOf('o'); // 错误示例,实际应为索引
int lastIndex = str.lastIndexOf('a'); // 15
// contains() - 是否包含子串
boolean hasJava = str.contains("Java"); // true
// startsWith() / endsWith() - 判断前缀后缀
boolean startHello = str.startsWith("Hello"); // true
boolean endIng = str.endsWith("ing"); // true
字符串截取与拼接
// 截取子串
String str = "Hello Java World";
// substring(beginIndex)
String sub1 = str.substring(6); // "Java World"
// substring(beginIndex, endIndex)
String sub2 = str.substring(6, 10); // "Java"(不包含endIndex)
// 字符串拼接
String s1 = "Hello";
String s2 = "World";
// 使用+运算符
String result1 = s1 + " " + s2; // "Hello World"
// 使用concat()
String result2 = s1.concat(" ").concat(s2); // "Hello World"
// 使用StringBuilder/StringBuffer(推荐循环拼接时使用)
StringBuilder sb = new StringBuilder();
sb.append(s1).append(" ").append(s2);
String result3 = sb.toString(); // "Hello World"
// join() - 使用分隔符合并字符串数组
String[] words = {"apple", "banana", "orange"};
String joined = String.join(", ", words); // "apple, banana, orange"
字符串替换
String str = "Hello Java, Java is fun";
// replace() - 替换所有匹配字符
String replaced1 = str.replace('a', 'A'); // "Hello JAvA, JAvA is fun"
// replace() - 替换所有匹配字符串
String replaced2 = str.replace("Java", "Python"); // "Hello Python, Python is fun"
// replaceAll() - 支持正则表达式
String replaced3 = str.replaceAll("J[a-z]+", "PYTHON"); // "Hello PYTHON, PYTHON is fun"
// replaceFirst() - 只替换第一个匹配
String replaced4 = str.replaceFirst("Java", "Python"); // "Hello Python, Java is fun"
字符串分割与转换
// 字符串分割
String str = "apple,banana,orange,grape";
// split() - 返回字符串数组
String[] fruits = str.split(",");
// 结果:["apple", "banana", "orange", "grape"]
// 限制分割次数
String[] limited = str.split(",", 3);
// 结果:["apple", "banana", "orange,grape"]
// 大小写转换
String text = "Hello World";
String upper = text.toUpperCase(); // "HELLO WORLD"
String lower = text.toLowerCase(); // "hello world"
// 去除空白
String spaces = " Hello World ";
String trimmed = spaces.trim(); // "Hello World"
String stripped = spaces.strip(); // "Hello World"(支持Unicode)
String stripLeading = spaces.stripLeading(); // "Hello World "
String stripTrailing = spaces.stripTrailing(); // " Hello World"
字符串格式化
// String.format()
String name = "Alice";
int age = 25;
double score = 92.5;
String formatted = String.format("姓名:%s,年龄:%d,成绩:%.1f", name, age, score);
// 结果:"姓名:Alice,年龄:25,成绩:92.5"
// printf() - 直接打印到控制台
System.out.printf("数值:%10d%n", 255); // "数值: 255"
System.out.printf("小数:%.2f%n", 3.14159); // "小数:3.14"
System.out.printf("左对齐:%-10s%n", "Hello"); // "左对齐:Hello "
// formatted() - Java 15+ 字符串模板
String msg = "Welcome %s to Java %d".formatted(name, 17);
字符数组与字符串互转
// 字符串转字符数组
String str = "Hello";
char[] charArray = str.toCharArray();
// charArray = {'H', 'e', 'l', 'l', 'o'}
// 字符数组转字符串
char[] chars = {'J', 'a', 'v', 'a'};
String fromChars = new String(chars); // "Java"
// 字符串转字节数组
byte[] bytes = str.getBytes(); // 默认编码
byte[] utf8Bytes = str.getBytes(StandardCharsets.UTF_8);
byte[] gbkBytes = str.getBytes("GBK");
综合案例:字符串处理工具
public class StringUtils {
// 反转字符串
public static String reverse(String str) {
return new StringBuilder(str).reverse().toString();
}
// 统计字符出现次数
public static int countChar(String str, char target) {
int count = 0;
for (char c : str.toCharArray()) {
if (c == target) {
count++;
}
}
return count;
}
// 判断是否为回文串
public static boolean isPalindrome(String str) {
String cleaned = str.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
return cleaned.equals(new StringBuilder(cleaned).reverse().toString());
}
// 移除指定字符
public static String removeChar(String str, char target) {
return str.replace(String.valueOf(target), "");
}
// 首字母大写
public static String capitalize(String str) {
if (str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
public static void main(String[] args) {
// 测试
System.out.println(reverse("Hello")); // "olleH"
System.out.println(countChar("Hello World", 'o')); // 2
System.out.println(isPalindrome("A man, a plan, a canal: Panama")); // true
System.out.println(removeChar("Hello World", 'l')); // "Heo Word"
System.out.println(capitalize("java")); // "Java"
}
}
性能建议
-
字符串拼接优化:

- 少量字符串:使用 运算符
- 循环拼接:使用
StringBuilder(非线程安全)或StringBuffer(线程安全) - Java 8+:字符串连接
String.join()更高效
-
避免频繁创建字符串:
// 不推荐 String result = ""; for (int i = 0; i < 1000; i++) { result += i; // 每次都会创建新对象 } // 推荐 StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000; i++) { sb.append(i); } String result = sb.toString();
这些是Java字符串操作中最常用的功能,掌握它们可以应对大多数字符串处理需求。