拆分和修剪字节数组

时间:2012-11-15 07:16:21

标签: java split byte

我有一个字节数组包含一些由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}

结束编辑

1 个答案:

答案 0 :(得分:0)

简单地遍历数组,维护索引left,指示最后一次拆分的位置。当您遇到拆分位置或数组的末尾时,您需要第二个索引right表示该位置。现在增加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;
}