字符串常用方法
String类提供大量字符串操作方法。
获取信息
length获取长度
Java
String str = "Hello World";
int len = str.length(); // 11
String chinese = "你好";
int len = chinese.length(); // 2
charAt获取字符
Java
String str = "Hello";
char c1 = str.charAt(0); // 'H'(第一个字符)
char c2 = str.charAt(4); // 'o'(最后一个)
// 索引从0开始,越界抛异常
// str.charAt(10); // StringIndexOutOfBoundsException
indexOf查找位置
Java
String str = "Hello World";
// 查找字符首次出现位置
int pos1 = str.indexOf('o'); // 4
int pos2 = str.indexOf('W'); // 6
// 查找子字符串位置
int pos3 = str.indexOf("World"); // 6
int pos4 = str.indexOf("lo"); // 3
// 未找到返回-1
int pos5 = str.indexOf('z'); // -1
int pos6 = str.indexOf("abc"); // -1
// 从指定位置开始查找
int pos7 = str.indexOf('o', 5); // 7(从索引5开始)
lastIndexOf反向查找
Java
String str = "Hello World";
// 查找字符最后出现位置
int pos = str.lastIndexOf('o'); // 7
// 查找子字符串最后位置
int pos2 = str.lastIndexOf("o"); // 7
contains判断包含
Java
String str = "Hello World";
boolean has = str.contains("World"); // true
boolean has2 = str.contains("Java"); // false
字符串截取
substring截取子串
Java
String str = "Hello World";
// 从指定位置截取到最后
String sub1 = str.substring(6); // "World"
// 截取指定范围(开始索引,结束索引)
String sub2 = str.substring(0, 5); // "Hello"(不含索引5)
// 注意:substring(beginIndex, endIndex)
// 包含beginIndex,不包含endIndex
截取示例
Java
String phone = "13812345678";
String prefix = phone.substring(0, 3); // "138"
String middle = phone.substring(3, 7); // "1234"
String suffix = phone.substring(7); // "5678"
字符串替换
replace替换字符/字符串
Java
String str = "Hello World";
// 替换字符
String r1 = str.replace('o', 'a'); // "Hella Warld"
// 替换字符串
String r2 = str.replace("World", "Java"); // "Hello Java"
// 替换所有匹配(replace也是全部替换)
String r3 = "aaa".replace('a', 'b'); // "bbb"
replaceAll正则替换
Java
String str = "Hello123World456";
// 正则替换:替换所有数字
String r1 = str.replaceAll("\\d", ""); // "HelloWorld"
// 替换所有非字母
String r2 = str.replaceAll("[^a-zA-Z]", ""); // "HelloWorld"
// 替换所有空白
String r3 = "a b c".replaceAll("\\s", ""); // "abc"
replaceFirst首次替换
Java
String str = "aaa";
// 只替换第一个匹配
String r = str.replaceFirst("a", "b"); // "baa"
字符串分割
split分割为数组
Java
String str = "a,b,c,d";
// 按逗号分割
String[] arr = str.split(","); // ["a", "b", "c", "d"]
// 限制分割数量
String[] arr2 = str.split(",", 2); // ["a", "b,c,d"]
split正则分割
Java
String str = "a1b2c3d";
// 按数字分割
String[] arr = str.split("\\d"); // ["a", "b", "c", "d"]
// 按多个字符分割
String str2 = "a,b;c|d";
String[] arr2 = str2.split("[,;|]"); // ["a", "b", "c", "d"]
分割注意事项
Java
// 末尾空字符串可能被忽略
String str = "a,b,c,";
String[] arr = str.split(","); // ["a", "b", "c"]
// 使用limit保留末尾空串
String[] arr2 = str.split(",", -1); // ["a", "b", "c", ""]
字符串修剪
trim去除两端空格
Java
String str = " Hello World ";
String trimmed = str.trim(); // "Hello World"
// 只去除两端,不去中间
String str2 = " Hello World ";
String trimmed2 = str2.trim(); // "Hello World"
strip去除空白(Java 11+)
Java
String str = " Hello ";
String stripped = str.strip(); // "Hello"
// strip支持更多空白字符(包括Unicode空白)
String str2 = " Hello "; // 全角空格
String stripped2 = str2.strip(); // "Hello"(全角空格也去除)
stripLeading/stripTrailing
Java
String str = " Hello ";
// 只去除前导空白
String leading = str.stripLeading(); // "Hello "
// 只去除尾部空白
String trailing = str.stripTrailing(); // " Hello"
大小写转换
toUpperCase转大写
Java
String str = "Hello";
String upper = str.toUpperCase(); // "HELLO"
// 指定Locale处理特殊语言
String turkish = "i".toUpperCase(Locale.forLanguageTag("tr")); // "İ"
toLowerCase转小写
Java
String str = "HELLO";
String lower = str.toLowerCase(); // "hello"
字符串判断
startsWith判断开头
Java
String str = "Hello World";
boolean start1 = str.startsWith("Hello"); // true
boolean start2 = str.startsWith("World"); // false
// 从指定位置判断
boolean start3 = str.startsWith("World", 6); // true
endsWith判断结尾
Java
String str = "Hello World";
boolean end1 = str.endsWith("World"); // true
boolean end2 = str.endsWith("Hello"); // false
// 文件名判断
String filename = "test.txt";
boolean isTxt = filename.endsWith(".txt"); // true
isEmpty判断空串
Java
String str = "";
boolean empty = str.isEmpty(); // true
String str2 = "Hello";
boolean empty2 = str2.isEmpty(); // false
isBlank判断空白(Java 11+)
Java
String str = " ";
boolean blank = str.isBlank(); // true
String str2 = "";
boolean blank2 = str2.isBlank(); // true
String str3 = "Hello";
boolean blank3 = str3.isBlank(); // false
字符串连接
concat连接字符串
Java
String str1 = "Hello";
String str2 = " World";
String result = str1.concat(str2); // "Hello World"
// 等价于 str1 + str2
join连接数组(Java 8+)
Java
// 用指定分隔符连接
String result = String.join("-", "a", "b", "c"); // "a-b-c"
// 连接数组
String[] arr = {"a", "b", "c"};
String result2 = String.join(",", arr); // "a,b,c"
字符串重复与空白
repeat重复(Java 11+)
Java
String str = "abc";
String repeated = str.repeat(3); // "abcabcabc"
String str2 = "x";
String repeated2 = str2.repeat(5); // "xxxxx"
其他方法
toCharArray转为字符数组
Java
String str = "Hello";
char[] chars = str.toCharArray(); // ['H', 'e', 'l', 'l', 'o']
getBytes转为字节数组
Java
String str = "Hello";
byte[] bytes = str.getBytes(); // ASCII编码
// 指定编码
byte[] bytes2 = str.getBytes("UTF-8");
byte[] bytes3 = str.getBytes(StandardCharsets.UTF_8);
format格式化字符串
Java
String name = "张三";
int age = 25;
String result = String.format("姓名:%s, 年龄:%d", name, age);
// "姓名:张三, 年龄:25"
// 格式化数字
String num = String.format("%.2f", 3.14159); // "3.14"
要点总结
- length()获取字符串长度
- charAt()获取指定位置字符
- indexOf()/lastIndexOf()查找位置
- contains()判断是否包含
- substring()截取子字符串
- replace()/replaceAll()替换
- split()分割字符串为数组
- trim()/strip()去除空白
- toUpperCase()/toLowerCase()转换大小写
- startsWith()/endsWith()判断开头结尾
- isEmpty()/isBlank()判断空/空白
- concat()/join()连接字符串
- repeat()重复字符串(Java 11+)
- format()格式化字符串
📝 发现内容有误?点击此处直接编辑