Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StringBuffer insert()和deleteCharAt()方法是如何工作的_Java_String_Stringbuilder_Stringbuffer - Fatal编程技术网

Java StringBuffer insert()和deleteCharAt()方法是如何工作的

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

在Java中,
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内部。尝试查看各个类的源代码。Google
java grepcode StringBuilder
。或者您可以查看JDK内部。