バイトと文字を混合しているため、このタイプの操作を実行することはできません。あなたは文字エンコーディングを仮定する必要があります(私はあなたの疑問にアスキーを想定していると思います)、またはJavaプラットフォームの文字エンコーディングを使用する必要があります。つまり、少なくとも文字配列に変換する必要がありますいくつかのCharset。
ここでの問題は、Javaのcharは2バイトであり、1バイトで作業すると考えていることです。とにかく、あなたが本当にこれを行い、提供されているツールを使用したくないのであれば、オープンソースツールを書いている一般的な人がツールキットを十分に活用しようとしているので、おそらくあなた自身で書く必要があります。私はそれが疑わしい。
だから、あなたがこれらの独自のバージョンを記述する必要があります、ここでの例です:
public int indexOf(byte[] bytes, String stuff, String encoding) {
byte[] pattern = stuff.getBytes(encoding);
int startIndex = 0, patternIndex = 0;
for(int i = 0; i < bytes.length && patternIndex < pattern.length; i++) {
if(pattern[patternIndex] == bytes[i]) {
if(patternIndex == 0) startIndex = i;
patternIndex++;
} else {
patternIndex = 0;
}
}
return patternIndex == pattern.length ? startIndex : -1;
}
あなたはこのライブラリを試みることができる:http://code.google.com/p/byteseek/
Arrays.binarySearch ???? http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html –
バイト配列は文字列と互換性がありません。JavaのようなUnicodeの世界では間違いありません。マルチバイト文字とロケールの違いは、このアプローチは時間の無駄ですので、標準的な実装はありません。簡単な操作(あなたの例での検索のような)では、標準的な配列機能を使うことができます。複雑な操作の場合、byte []でそれらを実行すべきではありません。 – Viruzzo
@SergeyBennerバイナリ検索はソートされた配列でしか動作しません。これは明らかに汎用文字列**を含むbyte []は**ではありません。 – Viruzzo