📜  快速查找字符串范围(1)

📅  最后修改于: 2023-12-03 15:09:54.433000             🧑  作者: Mango

快速查找字符串范围

在开发中,经常需要查找字符串中某个子串的位置或范围,比如在编辑器中查找关键字的位置、在文本处理工具中查找特定字符串的出现次数等。本文将介绍如何快速查找字符串范围的一些方法。

方法一:使用String的indexOf()和lastIndexOf()方法

indexOf()方法可以查找字符串中某个子串第一次出现的位置,返回该位置的索引值,如果找不到,则返回-1。例如:

String str = "hello world";
int index = str.indexOf("world"); // 返回6

lastIndexOf()方法可以查找字符串中某个子串最后一次出现的位置,返回该位置的索引值,如果找不到,则返回-1。例如:

String str = "hello world";
int index = str.lastIndexOf("o"); // 返回7

这两个方法虽然简单,但是并不能返回字符串的范围,需要自己计算。例如,如果要查找字符串中某个子串的所有位置,需要用循环结合indexOf()方法来实现。以下是一个示例代码:

String str = "hello world";
String target = "o";
int index = str.indexOf(target);
while (index >= 0) {
    System.out.println(index + "-" + (index + target.length() - 1));
    index = str.indexOf(target, index + target.length());
}

以上代码可以输出字符串中所有子串"o"的位置范围。

方法二:使用正则表达式

正则表达式是一个可用于匹配字符串的强大工具,其支持匹配模式、范围等特性。可以使用PatternMatcher类进行匹配,也可以使用字符串的matches()方法进行匹配。例如:

String str = "hello world";
String regex = "(?<=hello )\\w+"; // 匹配hello后面的单词
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.start() + "-" + (matcher.end() - 1));
}

以上代码可以输出字符串中所有匹配正则表达式"(?<=hello )\w+"的位置范围。

方法三:使用StringUtils的方法

Apache Commons Lang是一个常用的Java库,其提供了一系列字符串处理工具类。其中StringUtils类中提供了很多有用的方法,如indexOfAny()lastIndexOfAny()indexOfAnyBut()lastIndexOfAnyBut()等等,这些方法都可以返回字符串中某个子串的范围。例如:

String str = "hello world";
String[] targets = {"o", "r", "l"}; // 查找多个子串
int[] ranges = StringUtils.indexOfAny(str, targets);
for (int i = 0; i < ranges.length; i += 2) {
    System.out.println(ranges[i] + "-" + ranges[i + 1]);
}

以上代码可以输出字符串中所有子串"o"、"r"、"l"的位置范围。

方法四:使用StringTokenizer类

StringTokenizer类可以将一个字符串按照指定的分隔符拆分成多个子串,其提供了一些方法用于查找和获取子串。例如:

String str = "hello world";
String delim = " ";
StringTokenizer st = new StringTokenizer(str, delim);
while (st.hasMoreTokens()) {
    String token = st.nextToken();
    int start = str.indexOf(token);
    int end = start + token.length() - 1;
    System.out.println(start + "-" + end);
}

以上代码可以输出字符串中所有单词的位置范围。

综上所述,以上方法都可以用于快速查找字符串范围,程序员可以根据实际需求选择适合自己的方法进行使用。