基础巩固2--indexOf 和 lastIndexOf 是什么以及substring()方法

一、indexOf 和 lastIndexOf 都是索引文件
  indexOf 是查某个指定的字符串在字符串首次出现的位置(索引值) (也就是从前往后查)
lastIndexOf 是从右向左查某个指定的字符串在字符串中最后一次出现的位置(也就是从后往前查)
eg:
在这里插入图片描述
注意:  
那么问题来了 两个不是一前一后相反方向还是查么?怎么他们两个返回的索引值相同呢? 
因为:lastIndexOf()方法虽然是从后往前搜索,但返回的位置是从前开始数数和计算的,所以结果和indexOf()方法返回的相同
接下来在看一个例子:
在这里插入图片描述
   这个时候两个返回的索引值就不同了
   因为: 前面已经说了indexOf是从前向后查 而lastIndexOf是从后向前查 但是二者返回索引都是从前开始数数和计算的

总结:
   当数组(字符串)中所要查询的数(字符串/字符)在字符串(数组)中只出现一次的时候 二者返回的索引值相同
   当数组(字符串)中所要查询的数(字符串/字符)在字符串(数组)中出现两次及以上的时候
      indexOf 返回的是 valuesearch 第一次在数组(字符串)出现的位置(从左往右)
      lastIndexOf 返回的是 valuesearch 最后一次在数组(字符串)出现的位置(从左往右)《只不过查询的方向不同而已》

Indexof(),lastIndexof() 再次理解

package com.javabase.javabase.stringFunction;

import org.junit.Test;

/**
 * @Author ShawnYang
 * @Date 2019-11-08 10:51
 * @Description TODO
 * 修改人:
 * 修改时间:
 * 修改备注:
 */
public class StringFunctionTest {

    /**
     *1、int indexOf(String str) :返回第一次出现的指定子字符串首个字符在此字符串中索引位置。 
     * 2、int indexOf(String str, int startIndex):从指定的索引位置开始,返回第一次出现指定子字符串首个字符在此字符串中的索引位置。 
     * 3、int lastIndexOf(String str) :返回此字符串中最后一次出现指定子字符串的首个字符索引位置。 
     * 4、int lastIndexOf(String str, int endIndex) :返回从索引位置0开始到指定位置,最后一次出现子串的首个字符索引位置。
     * 这四个方法,找不到匹配的索引值 就返回 -1,下标位置都是从整个字符串最开头开始
     */
    @Test
    public void Test01(){
        String S = "0123456789 0123456789 0123456789";//注意字符串里面的空格也算字符
        //(代表第一次出现字符串“23”的首字符下标位置为2(2的下标))
        System.out.println(S.indexOf("23"));//输出2
        //代表从下标位置2(包含)开始直到结束,第一次出现字符串“23”的首字符下标位置为13(2的下标))
        System.out.println(S.indexOf("23",2));//输出2

        //(代表从下标位置4(包含)开始开始查找直到结束,第一次出现字符串“23”的首字符下标位置为13(2的下标))
        System.out.println(S.indexOf("23", 4));//输出13
        //(代表从下标位置25(包含)开始查找直到结束,第一次出现字符串“23”的首字符下标位置,由于没有23,只有一个3 找不到索引索引返回-1)
        System.out.println(S.indexOf("23", 25));//输出-1

        //(代表最后一次出现字符串“89”的首字符下标位置为30(注意下标都是从左往右数的,这里是8的下标不是9的下标))
        System.out.println(S.lastIndexOf("89"));//输出30
        //(代表从下标的位置0开始到下标的位置11(包含)结束最后一次出现字符串“23”的首字符下标位置为2)
        System.out.println(S.lastIndexOf("23",11));//输出2
        //(代表从下标的位置0开始到下标的位置9(包含)结束最后一次出现字符串“23”的首字符下标位置为2)
        System.out.println(S.lastIndexOf("23",9));//输出2

        //(代表从下标的位置0开始到下标的位置12结束最后一次出现字符串“23”的首字符下标位置为2)
        System.out.println(S.lastIndexOf("23",12));//输出2
        // 注意认真分析为什么结果是13,以上的这些方法并未把原字符串截取成子字符串,只是指定的查找的起始、终止位置不同,
        // 如下所示从代表从下标的位置0开始到下标的位置13(包含)结束最后一次出现字符串“23”的下标位置,下标13 正好是23 的开头2的索引,但是也可以查到并返回13,表示
        //这些方法并未截取字符串
        System.out.println(S.lastIndexOf("23",13));//输出13
        // 同理如上面所示 索引为24(包含)时 也可以去到所需的索引值
        System.out.println(S.lastIndexOf("23",24));//输出24



    }
}

二、String类的substring()方法
截取字符串,在java语言中的用法

1、 public String substring(int beginIndex)

返回一个新字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。

参数:beginIndex - 开始处的索引(包括),

返回:指定的子字符串,

异常:如果 beginIndex 为负或大于此 String 对象的长度,则抛出IndexOutOfBoundsException

例 :“unhappy”.substring(2) returns"happy"

“mybaby”.substring(3) returns"aby"

2、public String substring(int beginIndex, int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始, endIndex:到指定的 endIndex-1处结束。

参数:beginIndex - 开始处的索引(包括)

  endindex 结尾处索引(不包括)。

返回:指定的子字符串。
抛出:如果 beginIndex 为负,或length大于字符串长度,则抛出IndexOutOfBoundsException
例:“hamburger”.substring(3,8) returns “burge”
  “smiles”.substring(0,5) returns “smile”

三、实例分析
截取文件的后缀名

  String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String url = OSSFactory.build().uploadSuffix(file.getBytes(), suffix);

截取文件的名字

String name=file.getOriginalFilename().substring(0,file.getOriginalFilename().lastIndexOf(".") );
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值