Java String indexOf() 给定字符的索引

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
转载请注明出处:码谱记录 » Java String indexOf() 给定字符的索引
标签: