2011-10-03 44 views
0

在長字節數組中找到某些字節序列(字符串)的最簡單方法是什麼?查找字符串到ByteArray中。這是一個簡單的解決方案嗎?

預先感謝您!

UPD:我試圖做

my_byte_array.toString().indexOf(needle_string); 

的問題是,在閃蒸/空氣串包括UTF8字符,所以的indexOf將返回從字節數組「串」的偏移量不同的值(實際上它是zip壓縮包)

回答

1

假設數組足夠長,你不希望將其轉換爲字符串,我想我只是硬着頭皮做這樣的事情:

function byteArrayContainsString 
    (haystack : ByteArray, needleString : String) : Boolean 
{ 
    const needle : ByteArray = new ByteArray 

    needle.writeUTFBytes(needleString) 

    return byteArrayIndexOf(haystack, needle) !== -1 
} 

function byteArrayIndexOf 
    (haystack : ByteArray, needle : ByteArray) : int 
{ 
    search: for (var i : int = 0; i < haystack.length; ++i) { 
    for (var j : int = 0; j < needle.length; ++j) 
     if (haystack[i + j] !== needle[j]) 
     continue search 

    return i 
    } 

    return -1 
} 
+0

謝謝! @所有其他想法? – Eugeny89

1

我相信這會工作:

//needle_string is the sequence you want to find 
my_byte_array.toString().indexOf(needle_string); 

這將返回-1,如果沒有找到該序列,否則就是序列已找到的索引。

+0

謝謝!這是我嘗試的第一件事,問題是在flash/air字符串中包含utf8字符,因此indexOf將返回與字節數組中的「string」的偏移量不同的值(實際上是zip存檔)。我會更新我的答案,以免混淆他人。 – Eugeny89

+0

是的,我想這應該是第一次嘗試,因爲它很明顯...對不起,但我不太瞭解你的更新。 – danii

+0

但它與我的內容相似嗎?) – Eugeny89

相關問題