【问题标题】:what is the difference between StringBuffer appen and insert?StringBuffer 追加和插入有什么区别?
【发布时间】:2015-10-16 12:15:00
【问题描述】:

在我使用的 java 代码中

StringBuffer sb = new StringBuffer();
String str = "";
sb.append(str + "abc"); //??
sb.insert(0,(str + "abc")); //??

谁能告诉我sb.append(str + "abc");sb.insert(0,(str + "abc"));有什么区别

【问题讨论】:

  • 您是否阅读过这两种方法的 Javadoc?
  • 由于您的 sb String 值为空,从技术上讲,String 是相同的,但两种方法都实现了不同的功能。
  • 前置str 不会改变这里的任何内容,您不妨将其从问题中删除。
  • "Append" 和 "insert":这些词本身已经有所不同,而您提供带有 insert 的索引这一事实应该是一个巨大的赠品。
  • 不要同时使用StringBuffer/StringBuilder和字符串连接。

标签: java string stringbuffer


【解决方案1】:

在您的代码中,作为String str = "";,您看不到差异,但确实存在。

  • 第一个附加在末尾。
  • 在开头插入第二个。

看这段代码sn-ps:

1 附加:

String str = "abc";
StringBuilder sb = new StringBuilder("123");
sb.append("abc"); // str = "123abc"
//                             ↑ abc is appended at the end of sb

来自 API:

append(String):

将 char 数组参数的字符串表示形式附加到此序列中。


2 插入:

String str = "abc";
StringBuilder sb0 = new StringBuilder("123");
sb.insert(0, str); // str = "abc123"
//                           ↑ abc is inserted at position 0 of sb0
StringBuilder sb1 = new StringBuilder("123");
sb.insert(1, str); // str = "1abc23"
//                            ↑ abc is inserted at position 1 of sb1
StringBuilder sb3 = new StringBuilder("123");
sb.insert(2, str); // str = "12abc3"
//                             ↑ abc is inserted at position 2 of sb2
StringBuilder sb4 = new StringBuilder("123");
sb.insert(3, str); // str = "123abc"
//                              ↑ abc is inserted at position 3 of sb2

所以...我们可以推断出:StringBuilder.append == StringBuilder.insert(length)

insert(int offset, String str)

将 char 数组参数的字符串表示形式插入到 this 序列。 数组参数的字符被插入到这个序列的内容中在偏移指示的位置。这个序列的长度随着参数的长度而增加。

【讨论】:

  • 假设 sb 是一个新对象,sb.insert(0,(str + "abc")); // str = abc123 的输出应该是 123abc
【解决方案2】:

来自doc

appends()like 名称听起来添加到数据类型的末尾,而 inserts() 将一个字符串插入另一个字符串

文档中的示例,

如果 z 引用一个字符串缓冲区对象,其当前内容为 "start",然后方法调用 z.append("le") 将导致字符串 缓冲区包含“惊吓”,而 z.insert(4, "le") 会改变 包含“starlet”的字符串缓冲区。

在您的示例中,偏移量为 0,因此它将插入到字符串的开头。

注意:一般来说,如果 sb 指的是一个 StringBuffer 的实例,那么 sb.append(x) 和 sb.insert(sb.length(), x) 效果一样。

【讨论】:

    【解决方案3】:

    append() 方法将字符串追加到末尾,但 insert() 方法将一个字符串插入到另一个字符串中的给定偏移量。在 append() 方法中有单个参数,该参数值附加在字符串的末尾。在 insert() 方法中有两个参数,一个是偏移量(int 类型),另一个是插入值。

    append() 方法示例:-

    StringBuffer sb = new StringBuffer();
    sb.append("abc");
    sb.append("123");
    

    输出:abc123

    insert() 方法示例:-

    StringBuffer sb = new StringBuffer();
    

    sb.append("abc"); sb.insert(2,"123");

    输出:ab123c

    【讨论】:

      猜你喜欢
      • 2014-10-23
      • 2011-02-24
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      相关资源
      最近更新 更多