我想從下面的字節數組消息中獲取STX(0x02)的位置。如果你看到這個消息,它在很多地方都有0x2,但是我想要的唯一位置就是STX。我一直使用for循環向後循環。我必須順便循環回來。我嘗試了很多方法,但我很難獲得這個位置。我試過但沒有奏效的一種方法是,無論哪裏出現0x2,並且在它和前面的ETX(0x3)之間具有3個或更多元素,就可以獲得該STX的那個位置。但是我做錯了什麼,因爲我一直在得到一個我很難解決的錯誤。你能幫忙嗎?Java使用數組列表獲取值的位置
編輯:如果有更好的方法,那麼我可以通過將它與另一個0x2區分開來找到那個位置(STX)的邏輯,請你提供一下。
編輯:我必須向後循環,因爲這是給我的指示所要求的。
編輯:這裏是代碼:
//Test 3:
public String Test3(List<Byte> byteList) {
//checking positions of the STX and ETX
//looping through the array backwards
for (int i = byteList.size() - 1; i >= 0; i--) {
if (byteList.get(i) == STX && (i >= 3 && byteList.get(i) == ETX)) {
STXpos = i;
}
}
return STXpos;
}
byte[] validMsgWithRandomData = {0x32,0x32,0x32, //Random data
0x02, // STX
0x31,0x32,0x10,0x02,0x33, // Data 31 32 02 33
0x03, // ETX
0x31^0x32^0x02^0x33^0x03,// LRC calculated from the data (with the DLE removed) plus the ETX
0x2,0x3,0x00,0x02 //Random data
};
請分享您使用的代碼循環訪問數組。 – CubeJockey
「我必須順帶向後循環。」 - >爲什麼?至於核心問題......有一些標準算法用於查找文本中的模式,如[KMP](http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%% 93Pratt_algorithm)和[BM](http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm) – Turing85
byteList.get(i)== STX'既可以是true也可以是byteList。得到(i)== ETX'除非'STX == ETX'?你在STX測試中錯過了「我 - 某事」嗎? –