Java字符串截取&&获取某字符在指定字符串中第n次出现的下标

977 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第30天,点击查看活动详情

今天,坐在那里,本来是没事做,在看代码,然后下午突然现在的组长让我再整理一下另一个模块的相关 sql 语句,我刚开始看一点,突然,以前的老大又问我怎么那个又用不了了?哇,突然全是事,很紧张以前遗留的问题,因为之前写的时候,感觉就并不是很完美,调试时也只是根据特定的案例调通了,就很怕真正应用上的时候,面临其他的不同情况,不适用......不过还好,今天出的问题不是很严重,主要是我调了其他人封装的底层代码,当时也没看懂,所以没有考虑周全,在改的过程中学到了一些东西,整理一下......

获取某字符在指定字符串中第n次出现的下标

    public static int getIndexOf(String string, String str, int n) {
        Pattern pattern = Pattern.compile(string);
        Matcher findMatcher = pattern.matcher(str);
        //标记遍历字符串的位置
        int indexNum = 0;
        while(findMatcher.find()) {
            indexNum++;
            if(indexNum == n) {
                break;
            }
        }
        
        return findMatcher.start();
    }

上述方法就是我今天在改代码时需要的,方法旨在获取字符 str 在字符串 string 中第 n 次出现的下标。这样方便在对字符串做截取时,截取指定内容。

String 的 subString() 方法

既然提到了字符串的截取,就不得不提到 subString() 方法:

    public String subString(int beginIndex)

subSting() 方法,传递一个参数时,是指该字符串从指定索引处(也就是传入的参数)开始,一直到字符串末尾,截取这么长。

    public String subString(int beginIndex, int endIndex)

subString() 方法,传递两个参数时,是指该字符串从 beginIndex 开始,到 索引 (endIndex - 1) 处的字符,也就是说,开始索引 beginIndex,包括;结束索引 endIndex,不包括。截取的子字符串长度为:endIndex - beginIndex。

案例

    public static void main(String[] args) {
    
        String Str = new String("Hello Wrold!");
    
        System.out.print("从索引位置4开始,截取到字符串末尾 :" );
        System.out.println(Str.substring(4));
    
        System.out.print("从索引位置4开始,截取到索引位置10 :" );
        System.out.println(Str.substring(4, 10));
    }

结果:
    从索引位置4开始,截取到字符串末尾 : o Wrold!
    从索引位置4开始,截取到索引位置10 : o Wrol

通过 StringUtils 截取字符串

既然写到这了,那就再说一下 StringUtils 是怎么截取字符串的吧:

    StringUtils.substring("Hello World!", 4); // 结果为: o Wrold! 从索引位置4截取到字符串末尾
    StringUtils.substring("Hello World!", 4, 10); // 结果为: o Wrol 从索引位置4截取到索引位置10
    
    //截取某个字符串之前的字符
    StringUtils.substringBefore("Hello World!", "l"); //结果为:He 以第一个“l”为准(不包括第一个“l”)。
    StringUtils.substringBeforeLast("Hello World!", "l"); //结果为:Hello Wor 以最后一个“l”为准(不包括最后一个“l”)。
    
    //截取某个字符串之后的字符
    StringUtils.substringAfter("Hello World!", "l"); //结果为:lo World 以第一个”l”,为准(不包括第一个“l”)。。
    StringUtils.substringAfterLast("Hello World!", "l"); //结果为:d! 这里以最后一个“l”为准(不包括最后一个“l”)。
    
    //截取两个字符串之间隔的字符
    StringUtils.substringBetween("Hello World!", "o"); //结果为: W 两个 o 之间的字符串。
    StringUtils.substringBetween("Hello World!", "l", "r"); //结果为:lo Wo 第一个字符“l”与第一个字符“r”之间的字符串(不包括第一个字符“l”与第一个字符“r”本身)。
    StringUtils.substringsBetween("Hello World!", "l", "r"); //结果为:数组 [lo Wo] 第一个字符“l”与第一个字符“r”之间的字符串(不包括第一个字符“l”与第一个字符“r”本身),以数组形式返回。

通过 split() 方法 + 正则表达式 截取字符串

再提一嘴另一种字符串截取的方法:

    String str = "Hello, 你好, 9527";
    String[] strs=str.split(",");
    for(int i = 0, len = strs.length; i < len; i++) {
        System.out.println(strs[i].toString());
    }

结果:
    Hello
    你好
    9527

字符串的截取相关内容,以前也知道,但如果长时间不用,冷不丁用一下,还得现搜,恰好今天遇到,就整理了一下,加深记忆,也方便自己以后再用到了到处找......
希望本文能够帮到你,如有错误,望指正!
我向你敬礼啊,Salute!