Java:怎么判断一个字节数组包含另一个字节数组,并且字节顺序一致

目标

实现一个字节数组A包含另一个字节数组B的算法,顺序一致

原理

设置一个命中变量,初始化为0,记录两个数组连续连续命中的字节数量,命中数量等于字节数组B的长度时,返回true,如果循环到最后一个字节或者剩余字节长度小于字节数组B的长度时,命中变量都不等于字节数组B的长度,则返回false

算法

  • 1.如果字节数组B长度大于字节数组A的长度,直接返回false
  • 2.循环获取字节数组的每个字节值
  • 3.命中变量等于字节数组B的长度,返回true
  • 4.当前字节值是否等于索引为命中变量值的字节数组B中的字节值,如果是,命中变量自增1,continue到第2步继续下一个字节值的对比,否则继续第5步
  • 5.命中变量置0
  • 6.判断字节数组A的剩余字节数长度是否大于字节数组B的长度,如果大于则跳转到第2步执行循环体,否则跳出,返回false

实践

/**
	 * 判断是否一个字节数组按顺序包含另一个字节数组
	 * 
	 * @param pSrcByteArray
	 * @param pSubByteArray
	 * @return
	 */
	public static boolean isIncludeByteArray(byte[] pSrcByteArray, byte[] pSubByteArray) {
		boolean retValue = false;
		int lvSrcByteArrayLen = pSrcByteArray.length;
		int lvSubByteArrayLen = pSubByteArray.length;
		
		while(true) {
			if(lvSrcByteArrayLen < lvSubByteArrayLen) {
				break;
			}
			int lvHitByteNumberValue = 0;
			for(int i=0; i<lvSrcByteArrayLen; i++) {
				int tvByteValue = pSrcByteArray[i];
				if(lvHitByteNumberValue == pSubByteArray.length) {
					retValue = true;
					break;
				}
				if(tvByteValue == pSubByteArray[lvHitByteNumberValue]) {
					lvHitByteNumberValue++;
					continue;
				}
				lvHitByteNumberValue = 0;
				//剩余字节数
				int tvRemaindingByteLen = lvSrcByteArrayLen - i - 1;
				if(tvRemaindingByteLen < pSubByteArray.length) {
					break;
				}
			}
			break;
		}
		return retValue;
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值