ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

字符串bf匹配算法java实现

2022-02-02 14:35:49  阅读:257  来源: 互联网

标签:子串 主串 bf java int param 算法 匹配



/**
 * bf字符串寻找算法
 * 算法思想,使用子串对主串进行挨个匹配,如果匹配不正确,则主串向后加1,继续匹配
 * 将待匹配的主串和子串做成字符数组,方便匹配使用
 */
public class BfSearch {
    /**
     * 使用bf算法,在主串t中取匹配子串p
     * @param t 主串
     * @param p 子串
     * @return
     */
    public int bf(String t,String p){
        /**
         * 违法的寻找,直接返回-1
         * 判定方式:主串长度为0,主串为空,子串长度为0,子串为空或者子串长度大于主串长度,都为非法的查找,
         * 直接返回
         */
        if (t.length() == 0 || t == null || p.length() ==0 || p == null || t.length() < p.length()){
            return -1;
        }
        // 将字符串转成字符数组
        char[] t_array = t.toCharArray();// 主串字符数组
        char[] p_array = p.toCharArray();// 子串字符数组

        // 匹配过程
        return match(t_array,p_array);
    }

    /**
     * 字符串匹配过程
     * @param t
     * @param p
     * @return
     */
    private int match(char[] t,char[] p){
        int i = 0; // 设置主串检索下标位置
        int j = 0; // 设置子串检索下标位置
        int position = 0; // 保留检索后的开始位置
        while (i<t.length && j< p.length){
            if (t[i] == p[j]){
                // 主串位置与子串匹配成功,主串与子串下标均+1;
                i++;
                j++;
            } else {
                // 匹配失败
                i = i - j +1; // 主串索引为当前索引减去子串的索引再+1,是为了实现主串索引在不匹配情况下,向后移动一位的目的
                j = 0; // 子串检索,从0开始
            }
        }
        // 返回匹配到的索引位置
        if (i <= t.length){
            position = i - p.length;
        } else {
            position = -1;
        }
        return position;
    }

    /**
     * 测试方法
     * @param args
     */
    public static void main(String[] args) {
        BfSearch bf = new BfSearch();
        int bf1 = bf.bf("abcd", "cd");
        System.out.println(bf1);
    }
}

标签:子串,主串,bf,java,int,param,算法,匹配
来源: https://blog.csdn.net/weixin_38879931/article/details/122769368

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有