
在Java中,查找子串的常用方法包括:indexOf()、lastIndexOf()、contains()、substring()。其中,indexOf() 方法是最常用的,适用于查找子串在字符串中的位置。indexOf() 方法会返回子串的起始索引,如果未找到则返回-1。下面将详细介绍这些方法及其使用场景。
一、indexOf()方法
indexOf() 是Java中查找子串最常用的方法之一。该方法返回子串在字符串中第一次出现的索引,如果没有找到则返回-1。
1.1 基本用法
String mainString = "Hello, world!";
String subString = "world";
int index = mainString.indexOf(subString);
System.out.println("Index of 'world': " + index);
上述代码输出 Index of 'world': 7,因为子串 "world" 在主串中的起始索引为7。
1.2 从指定位置开始查找
String mainString = "Hello, world! Hello again!";
String subString = "Hello";
int index = mainString.indexOf(subString, 10);
System.out.println("Index of 'Hello' after position 10: " + index);
上述代码输出 Index of 'Hello' after position 10: 14,因为从索引10开始查找,第一个 "Hello" 出现在索引14。
1.3 使用循环查找所有出现位置
如果需要查找子串在主串中的所有出现位置,可以使用循环。
String mainString = "abracadabra";
String subString = "abra";
int index = mainString.indexOf(subString);
while (index >= 0) {
System.out.println("Found at index: " + index);
index = mainString.indexOf(subString, index + 1);
}
上述代码输出:
Found at index: 0
Found at index: 7
因为 "abra" 出现在索引0和7的位置。
二、lastIndexOf()方法
lastIndexOf() 方法返回子串在字符串中最后一次出现的索引,如果没有找到则返回-1。
2.1 基本用法
String mainString = "Hello, world! Hello again!";
String subString = "Hello";
int index = mainString.lastIndexOf(subString);
System.out.println("Last index of 'Hello': " + index);
上述代码输出 Last index of 'Hello': 14,因为子串 "Hello" 最后一次出现在索引14。
2.2 从指定位置开始向前查找
String mainString = "Hello, world! Hello again!";
String subString = "Hello";
int index = mainString.lastIndexOf(subString, 10);
System.out.println("Last index of 'Hello' before position 10: " + index);
上述代码输出 Last index of 'Hello' before position 10: 0,因为从索引10开始向前查找,第一个 "Hello" 出现在索引0。
三、contains()方法
contains() 方法用于检查字符串中是否包含某个子串,返回值为布尔类型。
3.1 基本用法
String mainString = "Hello, world!";
String subString = "world";
boolean contains = mainString.contains(subString);
System.out.println("Contains 'world': " + contains);
上述代码输出 Contains 'world': true,因为主串中包含子串 "world"。
四、substring()方法
substring() 方法用于截取字符串的一部分,可以用来实现子串查找的功能,但需要结合其他方法使用。
4.1 基本用法
String mainString = "Hello, world!";
String subString = mainString.substring(7, 12);
System.out.println("Substring from index 7 to 12: " + subString);
上述代码输出 Substring from index 7 to 12: world,因为索引7到12之间的子串是 "world"。
4.2 查找子串并截取
String mainString = "Hello, world!";
String subString = "world";
int startIndex = mainString.indexOf(subString);
if (startIndex != -1) {
String result = mainString.substring(startIndex, startIndex + subString.length());
System.out.println("Found and extracted substring: " + result);
}
上述代码输出 Found and extracted substring: world,因为找到了子串 "world" 并成功截取。
五、正则表达式
正则表达式可以用于更复杂的子串查找和匹配。
5.1 基本用法
import java.util.regex.*;
String mainString = "Hello, world! Hello again!";
String patternString = "Hello";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(mainString);
while (matcher.find()) {
System.out.println("Found at index: " + matcher.start());
}
上述代码输出:
Found at index: 0
Found at index: 14
因为 "Hello" 出现在索引0和14的位置。
5.2 使用正则表达式查找复杂模式
import java.util.regex.*;
String mainString = "Hello, world! Hello again!";
String patternString = "\bHello\b";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(mainString);
while (matcher.find()) {
System.out.println("Found at index: " + matcher.start());
}
上述代码输出:
Found at index: 0
Found at index: 14
在这个例子中,b 表示单词边界,确保 "Hello" 作为独立的单词被查找。
六、总结
在Java中查找子串的方法多种多样,每种方法都有其适用的场景。indexOf() 和 lastIndexOf() 方法适用于简单的子串查找、contains() 方法适用于检查字符串是否包含某个子串、substring() 方法则可以用于截取子串、正则表达式则适用于复杂的模式匹配。 选择合适的方法可以让代码更简洁、高效。
相关问答FAQs:
1. 什么是子串?
子串是指在一个字符串中连续的一段字符序列。
2. 如何在Java中查找子串的位置?
要在Java中查找子串的位置,可以使用String类的indexOf()方法。这个方法可以返回子串在字符串中第一次出现的位置。如果子串不存在,则返回-1。
3. 是否可以查找多个子串的位置?
是的,可以使用String类的indexOf()方法结合循环来查找多个子串的位置。每次查找到一个子串的位置后,可以将起始位置设置为上一次子串结束的位置,继续查找下一个子串的位置。这样可以找到所有子串在字符串中的位置。
文章包含AI辅助创作,作者:Edit2,如若转载,请注明出处:https://docs.pingcode.com/baike/216604