Java的String indexOf() 方法返回给定的字符或字符串的索引。如果在字符串中未找到给定字符/串,则方法返回-1,字符串的索引计数器从零开始。
Java String indexOf() 方法
String indexOf() 方法有四种重载形式:
方法定义 | 方法描述 |
---|---|
int indexOf(String substring) | 返回给定子字符串的索引位置 |
int indexOf(String substring, int fromIndex) | 从某一位置开始,返回给定子字符串的索引位置 |
int indexOf(int ch) | 返回给定char值的索引位置 |
int indexOf(int ch, int fromIndex) | 从某一位置开始,返回给定char值的索引位置 |
不允许向 indexOf() 方法传递空参数 null,会导致NullPointerException异常。
Java String indexOf(String substring) 示例
Java String indexOf(String substring)方法在给定的字符串对象中查找索引。
public static void main(String[] args) {
String name = "mapull.com";
System.out.println(name.indexOf("pull"));//2
System.out.println("hello world".indexOf("world"));//6
System.out.println("hello world".indexOf("ok"));//-1
System.out.println("你好".indexOf("好"));//1
System.out.println("123".indexOf("23"));//1
System.out.println("123".indexOf("12"));//0
}
上述代码可以发现:
- 索引值从 0 开始
- 找不到时,返回 -1
- 找到第一个就返回,不再后续查找
Java String indexOf(String substring, int fromIndex) 例子
该方法多了一个参数,formIndex 是偏移量,也就是从哪个位置开始查找。
public static void main(String[] args) {
System.out.println("hello world, my world".indexOf("world"));//6
System.out.println("hello world, my world".indexOf("world", 3));//6
System.out.println("hello world, my world".indexOf("world", 10));//16
System.out.println("hello world, my world".indexOf("world", 17));//-1
System.out.println("hello world, my world".indexOf("world", 100));//-1
}
上述代码可以发现:
- formIndex 默认是0
- 可以传入比字符串长度还大的值,这样总是返回 -1
Java String indexOf(int ch) 示例
Java 程序使用 indexOf(int ch)
方法在给定的字符串对象中查找入参字符’ch’的索引。
public static void main(String[] args) {
System.out.println("hello world".indexOf('h'));//0
System.out.println("hello world".indexOf('i'));//-1
System.out.println("hello world".indexOf('o'));//4
}
public static void main(String[] args) {
System.out.println("hello world".indexOf('e'));//1
System.out.println("hello world".indexOf(101));//1
System.out.println((int)'e'); // 101
}
需要注意上面两个示例的写法,虽然入参看起来一个 char,一个是 int ,但其实他们是可以相互转换的, ‘e’ 用 int 表示就是 101。
Java String indexOf(int ch, int fromIndex) 示例
public static void main(String[] args) {
System.out.println("hello world".indexOf('h',2));//-1
System.out.println("hello world".indexOf(104,2));//-1
System.out.println("hello world".indexOf('i',100));//-1
System.out.println("hello world".indexOf(105,100));//-1
System.out.println("hello world".indexOf('o',5));//7
System.out.println("hello world".indexOf(111,5));//7
}
如果你知道104就是代表 ‘h’,可以直接用 int 值,用 char 表示起来更直观一些。
实际上,String 类中也没有一个 indexOf(char ch)
这样的方法,Java 自动帮我们把char转为了对应的 ASCII 码。
### lastIndexOf() 方法
indexOf()
方法得到的是第一个出现的字符/串的索引位置,lastIndexOf()
方法得到的是最后一个出现的字符/串的索引位置。
lastIndexOf()
与indexOf()
方法用法完全相同。
public static void main(String[] args) {
System.out.println("hello world".indexOf('o'));//4
System.out.println("hello world".lastIndexOf('o'));//7
System.out.println("hello world".lastIndexOf('a'));//-1
System.out.println("长江大桥在长江上".lastIndexOf("长江"));//5
System.out.println("hello world".lastIndexOf(null));//java.lang.NullPointerException
}
- 字母 ‘o’出现两次,第一次在4,第二次在7。实际的位置要+1,因此索引从0开始
- 找不到的返回 -1
- 不能为空 null