Java语言在实现字符串处理方面具有非常优秀的性能表现,其中,Java中的indexOf方法是一个非常强大的方法,可以快速搜索字符序列的位置。有了它,我们可以很快的找到目标字符串在源字符串中的位置,而不必对字符串进行遍历搜索,大大提高了程序的效率。
一、 indexOf方法的基本介绍
Indexof方法定义在java.lang.String类中,常被用于快速查找一个字符或字符串在另外一个字符串中的位置。这个方法的调用格式为:
int indexOf(int ch)
int indexOf(int ch, int fromIndex)
int indexOf(String str)
int indexOf(String str, int fromIndex)
ch:要查找的字符
fromIndex:查找的起始位置
str:要查找的字符串
这些方法会在调用对象中查找目标字符串或者字符,如果找到就返回该字符或字符串在调用对象中的起始位置索引(从0开始),如果没有找到就返回-1。下面我们来了解一下indexOf方法的具体用法。
二、 indexOf方法的使用
(一). 查找一个字符在另一个字符串中的位置
在使用的时候,我们首先要定义一个字符串,并用indexOf方法查找该字符串中某个字符的位置。例如下面使用indexOf方法查找字母'a'在字符串中的位置:
String str = "abcdefghijklmnopqrstuvwxyz";
int a_index = str.indexOf('a');
System.out.println("a在字符串中的位置为:" + a_index);
程序运行的结果为:a在字符串中的位置为:0
在程序中,我们定义了一个字符串“abcdefghijklmnopqrstuvwxyz”,并且用indexOf方法查找了其中字母‘a’的位置。程序运行的结果为:字母‘a’在字符串中的位置为:0。因为在字符串中,每个字符都有一个位置索引,索引从0开始,所以字母‘a’在第0个位置上。
(二). 查找一个字符串在另一个字符串中的位置
除了可以查找字符,indexOf方法还可以查找字符串。例如下面的程序,就用indexOf方法查找字符串“bcd”的位置:
String str = "abcdefghijklmnopqrstuvwxyz";
int b_index = str.indexOf("bcd");
System.out.println("bcd在字符串中的位置为:" + b_index);
程序运行的结果为:bcd在字符串中的位置为:1
在程序中,我们定义了一个字符串“abcdefghijklmnopqrstuvwxyz”,并且用indexOf方法查找了其中字符串“bcd”的位置。程序运行的结果为:字符串“bcd”的位置为:1。因为在字符串中,‘b’的位置索引为1,所以字符串“bcd”的位置为1。
(三). 查找一个字符或字符串在另一个字符串中的位置,指定起始位置
除了可以查找字符和字符串,indexOf方法还可以指定查找的起始位置,例如下面的程序就用indexOf方法从指定起始位置查找字符‘c’的位置:
String str = "abcdefghijklmnopqrstuvwxyz";
int c_index = str.indexOf('c', 5);
System.out.println("从第5个位置开始查找,c在字符串中的位置为:" + c_index);
程序运行的结果为:从第5个位置开始查找,c在字符串中的位置为:2
在程序中,我们定义了一个字符串“abcdefghijklmnopqrstuvwxyz”,并且用indexOf方法从第5个位置开始查找字符‘c’的位置。程序运行的结果为:从第5个位置开始查找,字符‘c’在字符串中的位置为:2。因为从第5个位置开始的索引分别是:56789...,在第7个位置上(从0开始)才是字符‘c’。
(四). 查找一个字符或字符串在另一个字符串中的位置,不存在则返回-1
当被查找的字符或字符串不存在于调用对象中时,indexOf方法会返回-1。例如下面的程序,就用indexOf方法查找字符‘h’在字符串中的位置:
String str = "abcdefg";
int h_index = str.indexOf('h');
System.out.println("h在字符串中的位置为:" + h_index);
程序运行的结果为:h在字符串中的位置为:-1
在程序中,我们定义了一个字符串“abcdefg”,并且用indexOf方法查找了其中字符‘h’的位置。程序运行的结果为:字符‘h’在字符串中的位置为:-1。因为在字符串中没有出现字符‘h’,所以返回-1。
三、 优化查找性能
在使用indexOf方法时,可能会存在性能瓶颈,如果要查找的目标字符串在调用它的字符串中出现的次数很多,那么用最普通的方式逐个比较每一个字符的方法,效率就会非常低下。例如下面的程序,就用indexOf方法寻找字符串“Java”的位置:
String str = "Java编程进阶之路,基础进阶篇";
int index = str.indexOf("Java");
System.out.println("Java在字符串中的位置为:" + index);
程序运行结果:Java在字符串中的位置为:0
在程序中,我们定义了一个字符串“Java编程进阶之路,基础进阶篇”,并且用indexOf方法查找了其中字符串“Java”的位置。程序运行的结果为:字符串“Java”在字符串中的位置为:0。因为在字符串中,字符串“Java”在第0个位置上。
但是如果调用的字符串中出现非常多的“Java”时,就会遇到性能瓶颈。为了解决这个问题,indexOf方法提供了一个重载方法,可以直接传入查找的起始位置,这样就可以快速查找字符串中指定位置之后的目标字符第一次出现的位置。例如:
String str = "Java编程进阶之路,基础进阶篇";
int index = 0;
while((index = str.indexOf("Java", index)) != -1){
System.out.println("Java在字符串中的位置为:" + index);
index += "Java".length();
}
结果为:
Java在字符串中的位置为:0
Java在字符串中的位置为:14
在程序中,我们定义了一个字符串“Java编程进阶之路,基础进阶篇”,并且用indexOf方法查找了其中字符串“Java”的位置。而且使用了while循环来遍历整个字符串,找到所有出现的“Java”。我们可以看到Java分别在第0个位置和第14个位置出现。
四、 总结
通过上述对indexOf方法的介绍,我们可以进行简单的字符串处理,通过indexOf方法来快速的定位字符串中的字符序列。这样不仅大大提高了程序的效率,而且可以使程序的代码更为简洁有效,大大提高了程序员的开发效率。