startsWith和endsWith是String类用于判断前后缀的方法,均返回boolean;startsWith有三个重载版本,支持指定起始索引和CharSequence参数,endsWith仅支持后缀字符串且对空串返回true,二者均区分大小写、不接受null参数。

Java 中 startsWith 和 endsWith 是 String 类提供的两个常用方法,用于判断字符串是否以指定前缀或后缀开头/结尾,返回 boolean 值,用法简单但细节需要注意。
startsWith:检查字符串是否以指定前缀开始
该方法有三个重载版本,最常用的是传入一个 String 参数:
-
str.startsWith("abc"):从字符串开头位置(索引 0)开始匹配 -
str.startsWith("abc", fromIndex):从指定索引位置开始检查是否以该前缀开头(注意:不是“从该位置起截取再判断”,而是要求fromIndex必须为 0 才符合常规前缀语义;若fromIndex > 0,实际是判断子串str.substring(fromIndex)是否以该前缀开头) - 还有带
CharSequence参数的版本(Java 21+),兼容更多字符序列类型
示例:
String s = "HelloWorld";
System.out.println(s.startsWith("He")); // true
System.out.println(s.startsWith("lo", 3)); // true(s.substring(3) 是 "loWorld",确实以 "lo" 开头)endsWith:检查字符串是否以指定后缀结束
只有一种常用形式:str.endsWith("xyz"),它等价于 str.substring(str.length() - suffix.length()).equals(suffix)(内部实现类似),但更安全、简洁:
立即学习“Java免费学习笔记(深入)”;
- 如果后缀为空字符串(
""),始终返回true - 如果后缀长度大于原字符串长度,直接返回
false,不会抛异常 - 区分大小写,如需忽略大小写,需先统一转大小写再调用(例如
s.toLowerCase().endsWith("txt".toLowerCase()))
示例:
String file = "report.pdf";
System.out.println(file.endsWith(".pdf")); // true
System.out.println("".endsWith("")); // true
System.out.println("a".endsWith("aa")); // false(后缀更长)常见易错点和实用建议
这两个方法看似简单,但实际使用中容易忽略边界情况:
- 空字符串
""对startsWith和endsWith都返回true,这是 Java 的设计约定,不是 bug - 参数为
null会直接抛NullPointerException,调用前建议判空(如suffix != null && str.endsWith(suffix)) - 如果需要频繁做前后缀判断(比如文件类型校验),可考虑用正则表达式或 Apache Commons Lang 的
StringUtils(提供startsWithIgnoreCase等增强方法) - 不要用
==比较字符串内容,这两个方法内部用regionMatches实现,高效且安全
替代方案:更灵活的匹配需求
当需要模糊匹配、忽略大小写、支持通配符或正则时,startsWith/endsWith 就不够用了:
- 忽略大小写:用
str.toLowerCase().startsWith(prefix.toLowerCase()) - 多后缀判断:可用
Arrays.asList(".jpg", ".png", ".gif").contains(getExtension(str)) - 复杂规则:推荐用
str.matches(".*\.txt$")(注意正则中点号要转义)或Pattern.compile("\.txt$").matcher(str).find()


















