java自定义方法查找子串在父串中的位置

本文通过一个具体的Java代码示例,介绍了Boyer-Moore字符串搜索算法的实现方式。该算法用于在一个较长的字符串中查找一个较短的子串是否存在,以及其首次出现的位置。代码详细展示了如何通过比较字符来实现这一过程,对于理解Boyer-Moore算法的工作原理及其应用具有一定的参考价值。
public class BF {
    public static void main(String[] args) {
        String str1 = "ababcababa";//父串
        String str2 = "ababa";//被包含的子串
        System.out.println("位置(不是下标):" + judgeBF(str1, str2));
    }

    static int judgeBF(String str1, String str2) {
        char[] s = str1.toCharArray();
        char[] t = str2.toCharArray();
        int sIndex = 0;     // 主串下标
        int tIndex = 0;     // 子串下标
        int index = 0;      // 要查找的位置
        while (sIndex < s.length && tIndex < t.length) {
            if (s[sIndex] == t[tIndex]) {   //当两个字符相同,就继续比较下一个
                sIndex++;
                tIndex++;
            } else {            //不匹配则主串从下一个index匹配
                index++;
                sIndex = index;
                tIndex = 0;
            }
        }
        if (tIndex == t.length) {
            return index + 1; //匹配成功,返归子串在主串中的第一个字符出现的位置
        } else {
            return -1;      //最终匹配不成功,返回-1
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值