文档章节

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

如比如比
 如比如比
发布于 2016/08/11 11:42
字数 425
阅读 13
收藏 0

思想

在用关键词遍历分割对象时,只存储位置和长度信息。遍历结束后,根据遍历时取到的信息进行截取。

 

源代码:

    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);

                splited.add(new SplitedInfo(pre_pos, length));

                pos += len_keys - 1;

                pre_pos = pos + 1;

            }

            pos ++;

        }

        length = len_in - pre_pos;

        if (length > 0) {

            splited.add(new SplitedInfo(pre_pos, length));

        }

        // 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");

    }

 

}

 

 

(结束)

 

© 著作权归作者所有

共有 人打赏支持
如比如比
粉丝 124
博文 178
码字总数 286951
作品 0
日本
程序员
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
深入理解 RPC 消息协议设计

本节我们开始讲解 RPC 的消息协议设计背后的基本原理,了解 RPC 的协议开发背后有哪些需要考虑的基本点。在通晓原理之后,我们就可以自己设计一套协议来开发属于自己的 RPC 系统。 本节主要涉...

Java填坑之路
07/27
0
0
无所不能的RPC消息协议是如何设计的?

本节我们开始讲解 RPC 的消息协议设计背后的基本原理,了解 RPC 的协议开发背后有哪些需要考虑的基本点。在通晓原理之后,我们就可以自己设计一套协议来开发属于自己的 RPC 系统。 本节主要涉...

技术小能手
08/08
0
0
词语搜索算法思想 - 第五步 结构实现

第四步我们完成了组合的数组,现在我们需要对接第二步的方法,先做一个数组结合成字符串方法: public static void main(String[] args) {String item = "娱乐八卦";// System.out.println(A...

方旭
2012/02/25
0
2

没有更多内容

加载失败,请刷新页面

加载更多

HashTable

Hashtable 是一个散列表,它存储的内容是键值对(key-value)映射 Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口 Hashtable 的函数都是同步的,这意味着它是线...

职业搬砖20年
27分钟前
1
0
Linux系统状态查看命令1

10月23日任务 10.1 使用w查看系统负载 10.2 vmstat命令 10.3 top命令 10.4 sar命令 10.5 nload命令 查看系统负载 w命令 # 第一行:当前系统时间,系统启动时间,登录的用户,系统负载:1分钟...

robertt15
42分钟前
3
0
缓存那些事

前言 一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图1所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容...

Skqing
51分钟前
2
0
nginx开启stub_status模块配置方法

nginx开启stub_status模块配置方法 2017年12月13日 15:57:29 ly_dengle 阅读数:3765 标签: stub_statusnginxnginx开启stub_status模块 更多 个人分类: 软件工具php 版权声明:本文为博主原...

linjin200
57分钟前
3
0
挑逗 Java 程序员的那些 Scala 绝技

有个问题一直困扰着 Scala 社区,为什么一些 Java 开发者将 Scala 捧到了天上,认为它是来自上帝之吻的完美语言;而另外一些 Java 开发者却对它望而却步,认为它过于复杂而难以理解。同样是 ...

joymufeng
今天
184
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部