96. Java 数字和字符串 - 比较字符串和字符串的各个部分
Java
的 String
类提供了多种方法用于比较整个字符串或字符串的某个部分。下面列出的这些方法可以帮助我们在开发过程中完成字符串匹配、排序以及验证操作。
一、比较字符串的常用方法
-
endsWith(String suffix)
和 **startsWith(String prefix)
**判断字符串是否以指定的后缀结尾或以指定的前缀开头。 示例:javaString s = "Hello, Java!"; System.out.println(s.startsWith("Hello")); // 输出 true System.out.println(s.endsWith("!")); // 输出 true
-
**
startsWith(String prefix, int offset)
**判断从指定索引处开始的子字符串是否以某个前缀开头。 示例:javaString s = "Welcome to Java programming"; // 从索引 11 开始的子字符串为 "Java programming" System.out.println(s.startsWith("Java", 11)); // 输出 true
-
**
compareTo(String anotherString)
**按字典顺序比较两个字符串。返回一个整数:- 大于
0
表示此字符串大于参数字符串 - 等于
0
表示两个字符串相等 - 小于
0
表示此字符串小于参数字符串 示例:
javaString s1 = "apple"; String s2 = "banana"; System.out.println(s1.compareTo(s2)); // 输出一个负数,因为 apple 小于 banana
- 大于
-
**
compareToIgnoreCase(String str)
**与compareTo
类似,但忽略大小写。 示例:javaString s1 = "Apple"; String s2 = "apple"; System.out.println(s1.compareToIgnoreCase(s2)); // 输出 0,因为忽略大小写相等
-
**
equals(Object anObject)
**检查两个字符串是否完全相同(区分大小写)。 示例:javaString s1 = "Hello"; String s2 = "hello"; System.out.println(s1.equals(s2)); // 输出 false
-
**
equalsIgnoreCase(String anotherString)
**检查两个字符串是否相等,忽略大小写差异。 示例:javaSystem.out.println(s1.equalsIgnoreCase(s2)); // 输出 true
二、比较字符串部分的方法
-
**
regionMatches(int toffset, String other, int ooffset, int len)
**测试此字符串从索引toffset
开始的子字符串与其他字符串从索引ooffset
开始的子字符串长度为len
的部分是否匹配。 -
**
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
**与前一个方法类似,但可以指定在比较时是否忽略大小写。示例:
javaString s1 = "Hello, World!"; String s2 = "WORLD"; // 比较 s1 中从索引 7 开始的 5 个字符和 s2 是否匹配,忽略大小写 boolean match = s1.regionMatches(true, 7, s2, 0, 5); System.out.println(match); // 输出 true
-
**
matches(String regex)
**测试字符串是否与给定正则表达式匹配。 示例:javaString s = "abc123"; System.out.println(s.matches("[a-z]+\\d+")); // 输出 true
三、实际示例:使用 regionMatches
搜索子字符串
下面的程序 RegionMatchesDemo
演示了如何使用 regionMatches()
方法来查找字符串中指定部分的匹配情况。
java
public class RegionMatchesDemo {
public static void main(String[] args) {
String searchMe = "Green Eggs and Ham";
String findMe = "Eggs";
int searchMeLength = searchMe.length();
int findMeLength = findMe.length();
boolean foundIt = false;
// 遍历 searchMe 中的每个可能的子字符串
for (int i = 0; i <= (searchMeLength - findMeLength); i++) {
// 检查从索引 i 开始的子字符串是否与 findMe 匹配
if (searchMe.regionMatches(i, findMe, 0, findMeLength)) {
foundIt = true;
System.out.println("找到匹配的子字符串: " + searchMe.substring(i, i + findMeLength));
break;
}
}
if (!foundIt)
System.out.println("No match found.");
}
}
程序说明:
-
程序遍历字符串
searchMe
中的每个字符,逐步检查从该位置开始长度为findMeLength
的子字符串是否与findMe
匹配。 -
若找到匹配则输出该子字符串并终止循环,否则最后输出 "
No match found.
"。 -
运行该程序输出为:
java找到匹配的子字符串: Eggs
四、总结
- 使用
endsWith()
和startsWith()
检查字符串的开头和结尾。 - 使用
compareTo()
和compareToIgnoreCase()
进行字典序比较。 - 使用
equals()
和equalsIgnoreCase()
检查字符串是否相等。 regionMatches()
方法允许比较字符串的特定区域,适用于精细的字符串匹配。matches()
方法可用正则表达式进行复杂匹配。
通过这些方法,我们可以精确地比较整个字符串或其部分内容,为文本处理、验证和排序等任务提供有力支持。