Java StringBuffer insert()和deleteCharAt()方法是如何工作的
在Java中,Java StringBuffer insert()和deleteCharAt()方法是如何工作的,java,string,stringbuilder,stringbuffer,Java,String,Stringbuilder,Stringbuffer,在Java中,StringBuffer()或StringBuilder()中有称为insert()和deleteCharAt()的方法,我非常有兴趣进一步了解这两种特定方法的工作原理。或者如何使用标准java字符串方法编程。我想这是你自己写的非常简单的方法 在Sun的实现中,这两种方法都被委托给StringBuffer的父类AbstractStringBuilder: public synchronized StringBuffer insert(int index, char str[], i
StringBuffer()
或StringBuilder()
中有称为insert()
和deleteCharAt()
的方法,我非常有兴趣进一步了解这两种特定方法的工作原理。或者如何使用标准java字符串方法编程。我想这是你自己写的非常简单的方法 在Sun的实现中,这两种方法都被委托给StringBuffer
的父类AbstractStringBuilder
:
public synchronized StringBuffer insert(int index, char str[], int offset,
int len)
{
super.insert(index, str, offset, len);
return this;
}
public synchronized StringBuffer deleteCharAt(int index) {
super.deleteCharAt(index);
return this;
}
AbstractStringBuffer
具有以下实现:
public AbstractStringBuilder insert(int index, char str[], int offset,
int len)
{
if ((index < 0) || (index > length()))
throw new StringIndexOutOfBoundsException(index);
if ((offset < 0) || (len < 0) || (offset > str.length - len))
throw new StringIndexOutOfBoundsException(
"offset " + offset + ", len " + len + ", str.length "
+ str.length);
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
System.arraycopy(value, index, value, index + len, count - index);
System.arraycopy(str, offset, value, index, len);
count = newCount;
return this;
}
public AbstractStringBuilder deleteCharAt(int index) {
if ((index < 0) || (index >= count))
throw new StringIndexOutOfBoundsException(index);
System.arraycopy(value, index+1, value, index, count-index-1);
count--;
return this;
}
public AbstractStringBuilder插入(int-index,char-str[],int-offset,
内特兰)
{
如果((索引<0)| |(索引>长度())
抛出新StringIndexOutOfBoundsException(索引);
如果((偏移量<0)| |(长度<0)| |(偏移量>长度-长度))
抛出新StringIndexOutOfBoundsException(
偏移量“+偏移量+”,长度“+长度+”,长度
+str(长度);
int newCount=count+len;
if(newCount>value.length)
扩展容量(新计数);
数组复制(值,索引,值,索引+长度,计数-索引);
数组副本(str、offset、value、index、len);
计数=新计数;
归还这个;
}
公共抽象字符串生成器deleteCharAt(int索引){
如果((索引<0)| |(索引>=计数))
抛出新StringIndexOutOfBoundsException(索引);
System.arraycopy(值,索引+1,值,索引,计数-索引-1);
计数--;
归还这个;
}
因此,没有什么特别的。在Sun的实现中,这两种方法都被委托给
StringBuffer
的父类AbstractStringBuilder
:
public synchronized StringBuffer insert(int index, char str[], int offset,
int len)
{
super.insert(index, str, offset, len);
return this;
}
public synchronized StringBuffer deleteCharAt(int index) {
super.deleteCharAt(index);
return this;
}
AbstractStringBuffer
具有以下实现:
public AbstractStringBuilder insert(int index, char str[], int offset,
int len)
{
if ((index < 0) || (index > length()))
throw new StringIndexOutOfBoundsException(index);
if ((offset < 0) || (len < 0) || (offset > str.length - len))
throw new StringIndexOutOfBoundsException(
"offset " + offset + ", len " + len + ", str.length "
+ str.length);
int newCount = count + len;
if (newCount > value.length)
expandCapacity(newCount);
System.arraycopy(value, index, value, index + len, count - index);
System.arraycopy(str, offset, value, index, len);
count = newCount;
return this;
}
public AbstractStringBuilder deleteCharAt(int index) {
if ((index < 0) || (index >= count))
throw new StringIndexOutOfBoundsException(index);
System.arraycopy(value, index+1, value, index, count-index-1);
count--;
return this;
}
public AbstractStringBuilder插入(int-index,char-str[],int-offset,
内特兰)
{
如果((索引<0)| |(索引>长度())
抛出新StringIndexOutOfBoundsException(索引);
如果((偏移量<0)| |(长度<0)| |(偏移量>长度-长度))
抛出新StringIndexOutOfBoundsException(
偏移量“+偏移量+”,长度“+长度+”,长度
+str(长度);
int newCount=count+len;
if(newCount>value.length)
扩展容量(新计数);
数组复制(值,索引,值,索引+长度,计数-索引);
数组副本(str、offset、value、index、len);
计数=新计数;
归还这个;
}
公共抽象字符串生成器deleteCharAt(int索引){
如果((索引<0)| |(索引>=计数))
抛出新StringIndexOutOfBoundsException(索引);
System.arraycopy(值,索引+1,值,索引,计数-索引-1);
计数--;
归还这个;
}
因此,没有什么特别的。StringBuilder和StringBuffer的插入(…)
方法都使用在AbstractStringBuilder中实现的简单数组复制。插入(int,String)
:
通过使用系统删除字符。arraycopy(…)
另一种方法:这次删除点后的字符向左移动一个字符。StringBuilder和StringBuffer的插入(…)
方法都使用AbstractStringBuilder.insert中实现的简单数组复制(int,String)
:
通过使用System.arraycopy(…)删除字符
另一种方法是:这次删除点后的字符向左移动一个字符。根据,这两个类对其方法的说明是相同的。Insert根据输入将字符串插入字符串。CHARRAY根据CHARRAY添加字符串,依此类推。DeleteCharAt在弦中的某一部分
StringBuffer快一点,但StringBuilder更新一点
标准的java字符串方法不包含deleteCharAt()或insert()(这就是为什么有StringBuilder/Buffer),但您可能可以通过substring()找到解决方法
是的,您可以自己编写这些方法。我将查看JDK中StringBuilder或StringBuilder的源代码。根据,这两个类对其方法的说明是相同的。Insert基于输入将字符串插入字符串。Charray基于Charray添加字符串,依此类推。DeleteCharAt在cer处删除字符在弦中的一部分
StringBuffer快一点,但StringBuilder更新一点
标准的java字符串方法不包含deleteCharAt()或insert()(这就是为什么有StringBuilder/Buffer),但您可能可以通过substring()找到解决方法
是的,您可以自己编写这些方法。我会在JDK中查看StringBuilder或StringBuilder的源代码。尝试查看各个类的源代码。Google
java grepcode StringBuilder
。或者您可以查看JDK内部。尝试查看各个类的源代码。Googlejava grepcode StringBuilder
。或者您可以查看JDK内部。