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;
	}
发布了118 篇原创文章 · 获赞 14 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/github_38641765/article/details/100123835
今日推荐