dynamiccharacterarray.java

来自「This is a resource based on j2me embedde」· Java 代码 · 共 384 行

JAVA
384
字号
/* *    * * Copyright  1990-2007 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 2 only, as published by the Free Software Foundation. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is * included at /legal/license.txt). *  * You should have received a copy of the GNU General Public License * version 2 along with this work; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA *  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa * Clara, CA 95054 or visit www.sun.com if you need additional * information or have any questions. */package com.sun.midp.lcdui;/** * Similar to StringBuffer but does NOT resize when needed, only when * requested */public class DynamicCharacterArray {    /**     * buffer to store data. The capacity of this DynamicCharacterArray     * is equal to the length of this buffer     */    protected char buffer[];    /**      * the length of the array currently in use     */    protected int length;    /**     * Initializes the DCA with a capacity and an empty array     *     * @param capacity the maximum storage capacity     * @throws IllegalArgumentException if capacity <= 0      * @throws IllegalArgumentException if data.length > capacity      */    public DynamicCharacterArray(int capacity) {        this(null, capacity);    }    /**     * Initializes the array with str and a capacity of str.length()     *     * @param str initial array data, may NOT be null     * @throws NullPointerException if str is null     */    public DynamicCharacterArray(String str) {        this(str.toCharArray());    }    /**     * Initializes the array with data and a capacity of data.length     *     * @param data initial array data, may NOT be null     * @throws NullPointerException if data is null     */    public DynamicCharacterArray(char[] data) {        this(data, data.length);    }    /**     * Initializes the array with data and a capacity of capacity     *     * @param data initial array data, may be null     * @param capacity initial maximum capacity     * @throws IllegalArgumentException if capacity <= 0      * @throws IllegalArgumentException if data.length > capacity      */    public DynamicCharacterArray(char[] data, int capacity) {        int len;        if (capacity <= 0) {            throw new IllegalArgumentException();        }        if (data != null) {            if (data.length > capacity) {                throw new IllegalArgumentException();            }            this.length = data.length;            buffer = new char[capacity];            System.arraycopy(data, 0, buffer, 0, this.length);        } else {            buffer = new char[capacity];        }    }    /**     * Inserts an subset of an array into the buffer.     * The offset parameter must be within the range [0..(size())], inclusive.     * The length parameter must be a non-negative integer such that      * (offset + length) <= size().     *     * @param data array to insert     * @param offset offset into data     * @param ins_length length of subset     * @param position index into the internal buffer to insert the subset     * @return the actual position the data was inserted     * @throws ArrayIndexOutOfBoundsException if offset and length     *         specify an invalid range     * @throws IllegalArgumentException if the resulting array would exceed     *         the capacity     * @throws NullPointerException if data is null     */    public int insert(char[] data, int offset, int ins_length, int position) {        if (position < 0) {            position = 0;        } else if (position > length) {            position = length;        }        if (offset < 0             || offset > data.length             || ins_length < 0            || ins_length > data.length            || (offset + ins_length) < 0            || (offset + ins_length) > data.length) {            throw new ArrayIndexOutOfBoundsException();        }        if (length + ins_length > buffer.length) {            throw new IllegalArgumentException();        }        if (data.length != 0) {            System.arraycopy(buffer, position,                              buffer, position + ins_length,                              length - position);            System.arraycopy(data, offset, buffer, position, ins_length);            length += ins_length;        }        return position;    }    /**     * Inserts an character into the buffer.     *     * @param ch character to insert     * @param position index into the internal buffer to insert the subset     * @return the actual position the data was inserted     * @throws IllegalArgumentException if the resulting array would exceed     *         the capacity     */    public int insert(int position, char ch) {        char arr[] = { ch };        return insert(arr, 0, 1, position);    }       /**     * Inserts an String into the buffer.     *     * @param str String to insert     * @param position index into the internal buffer to insert the subset     * @return the actual position the data was inserted     * @throws ArrayIndexOutOfBoundsException if offset and length     *         specify an invalid range     * @throws IllegalArgumentException if the resulting array would exceed     *         the capacity     * @throws NullPointerException if data is null     */    public int insert(int position, String str) {        return insert(str.toCharArray(), 0, str.length(), position);    }    /**     * Appends a character onto the end of the buffer.     *     * @param c character to append     * @throws IllegalArgumentException if the resulting array would exceed     *         the capacity     */    public void append(char c) {        insert(length, c);    }    /**     * Sets the internal buffer to the values of the subset specified     * The offset parameter must be within the range [0..(size())], inclusive.     * The length parameter must be a non-negative integer such that      * (offset + length) <= size(). If data is null the buffer is emptied.     *     * @param data the data to use to set the buffer     * @param offset offset into data     * @param set_length length of the subset     * @throws ArrayIndexOutOfBoundsException if offset and length     *         specify an invalid range     * @throws IllegalArgumentException if length exceeds the capacity     */    public void set(char[] data, int offset, int set_length) {        if (data == null) {            length = 0;            return;        }        if (offset < 0             || offset > data.length             || set_length < 0            || set_length > data.length            || (offset + set_length) < 0            || (offset + set_length) > data.length) {            throw new ArrayIndexOutOfBoundsException();        }        if (set_length > buffer.length) {             throw new IllegalArgumentException();        }        System.arraycopy(data, offset, buffer, 0, set_length);        length = set_length;    }    /**     * Returns the internal buffer in the array provided. This must     * be at least length() long.     *     * @param data array to fill with the character of the internal buffer     * @throws IndexOutOfBoundsException if data cannot hold the contents     * @throws NullPointerException if data is null     */    public void get(char[] data) {        getChars(0, buffer.length, data, 0);    }    /**     * Returns the internal buffer in the array provided.      *     * @param position index into the internal buffer to start copying     * @param get_length length of region to copy     * @param data array to fill with the character of the internal buffer     * @param offset offset into data to copy to     * @throws IndexOutOfBoundsException if data cannot hold the contents     * @throws NullPointerException if data is null     */    public void getChars(int position, int get_length,     			 char[] data, int offset) {        System.arraycopy(buffer, position, data, offset, get_length);    }    /**     * Returns a copy of the active portion of the internal buffer.      *     * @return character array     */    public char[] toCharArray() {        char[] buf = new char[length];        System.arraycopy(buffer, 0, buf, 0, buf.length);         return buf;    }    /**     * Deletes the specified range from the internal buffer     *     * @param offset offset to begin deleting     * @param del_length length of portion to delete     * @throws StringIndexOutOfBoundsException if offset and length do     *         not specific a valid range in the internal buffer     */    public void delete(int offset, int del_length) {        if (offset < 0             || del_length < 0             || (offset + del_length) < 0            || (offset + del_length) > length) {            throw new StringIndexOutOfBoundsException();        }        if ((offset + del_length) < length) {            System.arraycopy(buffer, offset + del_length,                              buffer, offset,                              length - (offset + del_length));        }        length -= del_length;    }    /**     * Sets the maximum capacity to the specified value. the buffer may     * be truncated if the new capacity is less than the current capacity.     *     * @param capacity new maximum capacity     * @throws IllegalArgumentException is zero or less     */    public void setCapacity(int capacity) {        if (capacity <= 0) {            throw new IllegalArgumentException();        }        if (buffer.length == capacity) {            return;        }        if (length > capacity) {            length = capacity;        }        char[] newBuffer = new char[capacity];        System.arraycopy(buffer, 0, newBuffer, 0, length);         buffer = newBuffer;    }    /**     * Returns the current capacity     *     * @return the maximum capacity      */    public int capacity() {        return buffer.length;    }    /**       * Returns the length of current data     *     * @return current length     */     public int length() {        return length;    }    /**     * Returns the character at the specified index of the internal buffer     *     * @param index index into the buffer     * @return the character at the specified index     * @throws IndexOutOfBoundsException if the 0 < index or index > length()     */    public char charAt(int index) {        if (index < 0 || index > length) {             throw new IndexOutOfBoundsException();        }        return buffer[index];    }    /**     * Sets the character at index to ch     *     * @param index index into the buffer     * @param ch character to set to     * @throws IndexOutOfBoundsException if the 0 < index or index > length()     */    public void setCharAt(int index, char ch) {        if (index < 0 || index > length) {             throw new IndexOutOfBoundsException();        }        buffer[index] = ch;    }    /**     * Return a String representation of the internal buffer     *     * @return a String object     */    public String toString() {        return String.valueOf(buffer, 0, length);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?