stringbuffer.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 912 行 · 第 1/3 页
JAVA
912 行
* @return this <code>StringBuffer</code>
* @exception StringIndexOutOfBoundsException if offset is out of bounds
* @see String#valueOf(Object)
*/
public StringBuffer insert(int offset, Object obj)
{
return insert(offset, obj == null ? "null" : obj.toString());
}
/**
* Insert the <code>String</code> argument into this
* <code>StringBuffer</code>. If str is null, the String "null" is used
* instead.
*
* @param offset the place to insert in this buffer
* @param str the <code>String</code> to insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
*/
public synchronized StringBuffer insert(int offset, String str)
{
if (offset < 0 || offset > count)
throw new StringIndexOutOfBoundsException(offset);
if (str == null)
str = "null";
int len = str.count;
ensureCapacity_unsynchronized(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(0, len, value, offset);
count += len;
return this;
}
/**
* Insert the <code>char[]</code> argument into this
* <code>StringBuffer</code>.
*
* @param offset the place to insert in this buffer
* @param data the <code>char[]</code> to insert
* @return this <code>StringBuffer</code>
* @throws NullPointerException if <code>data</code> is <code>null</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
* @see #insert(int, char[], int, int)
*/
public StringBuffer insert(int offset, char[] data)
{
return insert(offset, data, 0, data.length);
}
/**
* Insert the <code>String</code> value of the argument into this
* <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
* to <code>String</code>.
*
* @param offset the place to insert in this buffer
* @param bool the <code>boolean</code> to convert and insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
* @see String#valueOf(boolean)
*/
public StringBuffer insert(int offset, boolean bool)
{
return insert(offset, bool ? "true" : "false");
}
/**
* Insert the <code>char</code> argument into this <code>StringBuffer</code>.
*
* @param offset the place to insert in this buffer
* @param ch the <code>char</code> to insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
*/
public synchronized StringBuffer insert(int offset, char ch)
{
if (offset < 0 || offset > count)
throw new StringIndexOutOfBoundsException(offset);
ensureCapacity_unsynchronized(count + 1);
System.arraycopy(value, offset, value, offset + 1, count - offset);
value[offset] = ch;
count++;
return this;
}
/**
* Insert the <code>String</code> value of the argument into this
* <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
* to <code>String</code>.
*
* @param offset the place to insert in this buffer
* @param inum the <code>int</code> to convert and insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
* @see String#valueOf(int)
*/
public StringBuffer insert(int offset, int inum)
{
return insert(offset, String.valueOf(inum));
}
/**
* Insert the <code>String</code> value of the argument into this
* <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
* to <code>String</code>.
*
* @param offset the place to insert in this buffer
* @param lnum the <code>long</code> to convert and insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
* @see String#valueOf(long)
*/
public StringBuffer insert(int offset, long lnum)
{
return insert(offset, Long.toString(lnum, 10));
}
/**
* Insert the <code>String</code> value of the argument into this
* <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
* to <code>String</code>.
*
* @param offset the place to insert in this buffer
* @param fnum the <code>float</code> to convert and insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
* @see String#valueOf(float)
*/
public StringBuffer insert(int offset, float fnum)
{
return insert(offset, Float.toString(fnum));
}
/**
* Insert the <code>String</code> value of the argument into this
* <code>StringBuffer</code>. Uses <code>String.valueOf()</code> to convert
* to <code>String</code>.
*
* @param offset the place to insert in this buffer
* @param dnum the <code>double</code> to convert and insert
* @return this <code>StringBuffer</code>
* @throws StringIndexOutOfBoundsException if offset is out of bounds
* @see String#valueOf(double)
*/
public StringBuffer insert(int offset, double dnum)
{
return insert(offset, Double.toString(dnum));
}
/**
* Finds the first instance of a substring in this StringBuffer.
*
* @param str String to find
* @return location (base 0) of the String, or -1 if not found
* @throws NullPointerException if str is null
* @see #indexOf(String, int)
* @since 1.4
*/
public int indexOf(String str)
{
return indexOf(str, 0);
}
/**
* Finds the first instance of a String in this StringBuffer, starting at
* a given index. If starting index is less than 0, the search starts at
* the beginning of this String. If the starting index is greater than the
* length of this String, or the substring is not found, -1 is returned.
*
* @param str String to find
* @param fromIndex index to start the search
* @return location (base 0) of the String, or -1 if not found
* @throws NullPointerException if str is null
* @since 1.4
*/
public synchronized int indexOf(String str, int fromIndex)
{
if (fromIndex < 0)
fromIndex = 0;
int limit = count - str.count;
for ( ; fromIndex <= limit; fromIndex++)
if (regionMatches(fromIndex, str))
return fromIndex;
return -1;
}
/**
* Finds the last instance of a substring in this StringBuffer.
*
* @param str String to find
* @return location (base 0) of the String, or -1 if not found
* @throws NullPointerException if str is null
* @see #lastIndexOf(String, int)
* @since 1.4
*/
public int lastIndexOf(String str)
{
return lastIndexOf(str, count - str.count);
}
/**
* Finds the last instance of a String in this StringBuffer, starting at a
* given index. If starting index is greater than the maximum valid index,
* then the search begins at the end of this String. If the starting index
* is less than zero, or the substring is not found, -1 is returned.
*
* @param str String to find
* @param fromIndex index to start the search
* @return location (base 0) of the String, or -1 if not found
* @throws NullPointerException if str is null
* @since 1.4
*/
public synchronized int lastIndexOf(String str, int fromIndex)
{
fromIndex = Math.min(fromIndex, count - str.count);
for ( ; fromIndex >= 0; fromIndex--)
if (regionMatches(fromIndex, str))
return fromIndex;
return -1;
}
/**
* Reverse the characters in this StringBuffer. The same sequence of
* characters exists, but in the reverse index ordering.
*
* @return this <code>StringBuffer</code>
*/
public synchronized StringBuffer reverse()
{
// Call ensureCapacity to enforce copy-on-write.
ensureCapacity_unsynchronized(count);
for (int i = count >> 1, j = count - i; --i >= 0; ++j)
{
char c = value[i];
value[i] = value[j];
value[j] = c;
}
return this;
}
/**
* Convert this <code>StringBuffer</code> to a <code>String</code>. The
* String is composed of the characters currently in this StringBuffer. Note
* that the result is a copy, and that future modifications to this buffer
* do not affect the String.
*
* @return the characters in this StringBuffer
*/
public String toString()
{
// The string will set this.shared = true.
return new String(this);
}
/**
* An unsynchronized version of ensureCapacity, used internally to avoid
* the cost of a second lock on the same object. This also has the side
* effect of duplicating the array, if it was shared (to form copy-on-write
* semantics).
*
* @param minimumCapacity the minimum capacity
* @see #ensureCapacity(int)
*/
private void ensureCapacity_unsynchronized(int minimumCapacity)
{
if (shared || minimumCapacity > value.length)
{
// We don't want to make a larger vector when `shared' is
// set. If we do, then setLength becomes very inefficient
// when repeatedly reusing a StringBuffer in a loop.
int max = (minimumCapacity > value.length
? value.length * 2 + 2
: value.length);
minimumCapacity = (minimumCapacity < max ? max : minimumCapacity);
char[] nb = new char[minimumCapacity];
System.arraycopy(value, 0, nb, 0, count);
value = nb;
shared = false;
}
}
/**
* Predicate which determines if a substring of this matches another String
* starting at a specified offset for each String and continuing for a
* specified length. This is more efficient than creating a String to call
* indexOf on.
*
* @param toffset index to start comparison at for this String
* @param other non-null String to compare to region of this
* @return true if regions match, false otherwise
* @see #indexOf(String, int)
* @see #lastIndexOf(String, int)
* @see String#regionMatches(boolean, int, String, int, int)
*/
private boolean regionMatches(int toffset, String other)
{
int len = other.count;
int index = other.offset;
while (--len >= 0)
if (value[toffset++] != other.value[index++])
return false;
return true;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?