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;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章