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 + -
显示快捷键?