# 数据结构-数组之数组分割 原

如比如比

public static byte[][] split(byte[] in, byte[] keys) {

if ( in == null ) return null;

if ( keys == null || keys.length <= 0) return new byte[][] {in};

if (in.length < keys.length) return new byte[][] {in};

ArrayList<SplitedInfo> splited = new ArrayList<SplitedInfo>();

int pre_pos = 0;

int pos = 0;

int length = 0;

int len_in = in.length;

int len_keys = keys.length;

int max = (len_in - len_keys) + 1;

while(pos < max) {

// System.out.println("pos=" + pos + ",max=" + max);

if (compare(in, pos, keys) == true) {

// pos

// length

length = pos - pre_pos;

// System.out.println("★pos:" + pre_pos + ",length=" + length);

pos += len_keys - 1;

pre_pos = pos + 1;

}

pos ++;

}

length = len_in - pre_pos;

if (length > 0) {

}

// System.out.println("★pos:" + pre_pos + ",length=" + length);

byte[][] result = new byte[splited.size()][];

int i = 0;

for (SplitedInfo info : splited) {

if (info.getLength() == 0) {

result[i] = null;

} else {

result[i] = new byte[info.getLength()];

System.arraycopy(in, info.getPos(), result[i], 0, info.getLength());

}

i ++;

}

return result;

}

private static boolean compare(byte[] in, int pos, byte[] keys) {

int i = 0;

while(i < keys.length) {

if (keys[i] != in[pos + i]) {

return false;

}

i ++;

}

return true;

}

}

class SplitedInfo {

private int pos;

private int length;

public SplitedInfo() {

this.pos = -1;

this.length = -1;

}

public SplitedInfo(int pos, int length) {

this.pos = pos;

this.length = length;

}

/**

* @return pos

*/

public int getPos() {

return pos;

}

/**

* @param pos  pos

*/

public void setPos(int pos) {

this.pos = pos;

}

/**

* @return length

*/

public int getLength() {

return length;

}

/**

* @param length  length

*/

public void setLength(int length) {

this.length = length;

}

/**

* @see java.lang.Object#toString()

*/

@Override

public String toString() {

StringBuffer buf = new StringBuffer();

buf.append("pos=");

buf.append(this.pos);

buf.append(",length=");

buf.append(this.length);

return buf.toString();

}

}

import javay.util.UArys;

public class TestSplit {

public static void main(String[] args) {

byte[] a = new byte[10];

a[0] = 1;

a[1] = 1;

a[2] = 2; // 0, 2

a[3] = 1;

a[4] = 3;

a[5] = 2; // 3, 2

a[6] = 4;

a[7] = 2; // 6, 1

a[8] = 2; // 8, 0

a[9] = 5; // 9. 1

byte[] b = new byte[2];

b[0] = 2;

b[1] = 2;

byte[][] c = UArys.split(a, b);

System.out.println("test");

}

}

（结束）

### 如比如比

Python Data Science, NumPy 1

NumPy（Numerical Python 的简称）提供了 Python 中高效计算的数据结构以及丰富的数据处理方法。Numpy 的 array 和 Python 的 list 接口非常相似，但 Numpy 却要比 list 快的多。NumPy 目前几...

eisenxu
2017/09/30
0
0
【编程能力不行？那就写啊！】快速排序详解

HustWolf
2017/12/21
0
0

Java填坑之路
07/27
0
0

2012/02/25
0
2
CUDA学习（三十一）

night李
02/10
0
0

Pure-ftpd搭建FTP

12月11日任务 15.4 xshell使用xftp传输文件 15.5 使用pure-ftpd搭建ftp服务 使用pure-ftpd搭建FTP服务 轻量的ftp软件 安装pure-ftpd并修改配置文件 # pure-ftpd为epel扩展库里的软件[root...

robertt15
11分钟前
2
0

18分钟前
1
0
Android面试整理(附答案)

22分钟前
3
0
Vue 改变数组触发视图更新

Vue 改变数组触发视图更新 以下方法调用会改变原始数组 push(), pop(), shift(), unshift(), splice(), sort(), reverse()push()push() 方法可向数组的末尾添加一个或多个元素，并返回新的...

28分钟前
2
0

lionets
44分钟前
3
0