0

バイト配列に7で区切られたいくつかのバイトが含まれているので、これらのバイトを分割してから、分離されたバイトをトリミングしたいと思います。ie-14は、分離されたバイト配列の左右から削除する必要があります。

例:

入力:{-14、2、54、23、-14、7、5、73、12、-14、-14、7}
出力:{2、54、23}、{5、73、12}

入力:{34、64、23、-14、43、-14、7、7、42、2、-14}
出力:{34、64、23、-14、43}、{42、2}

編集
空のアレイは削除する必要があります。たとえば、7が入力配列の最初または最後にある場合は、削除する必要があります。

その他の例:

入力:{7、34,21,7}
出力:{34,21}

入力:{-14、-14,7,7,34,21、-14、7、-14}
出力:{34、21}

編集終了

4

1 に答える 1

0

left最後の分割の位置を示すインデックスを維持しながら、配列を反復処理するだけです。分割された場所、または配列の終わりに遭遇すると、rightその位置を示す2番目のインデックスを取得します。次に、シーケンスをトリミングするためleftに増減します。right次に、指定されたサブシーケンスのコピーを作成します。

int left = 0, right, pos;
for (pos = 0; pos <= a.length; ++pos) {
  if (pos < a.length && a[pos] != 7)
    continue; // no need to split, so simply go on
  for (right = pos; right != left; --right) // drop trailing -14s
    if (a[right - 1] != -14)
      break;
  // "right" now is one past the last element we want to keep
  for (; left != right; ++left) // drop leading -14s
    if (a[left] != -14)
      break;
  if (left != right) {
    byte[] b = new int[right - left];
    System.arraycopy(a, left, b, 0, right - left);
    res.add(b);
  }
  left = pos + 1;
}
于 2012-11-15T07:43:09.967 に答える