首页 > 代码库 > java.lang.StringBuilder
java.lang.StringBuilder
1 package java.lang; 2 3 /** 4 * A mutable sequence of characters. This class provides an API compatible with 5 * <code>StringBuffer</code>, but with no guarantee of synchronization. This 6 * class is designed for use as a drop-in replacement for 7 * <code>StringBuffer</code> in places where the string buffer was being used by 8 * a single thread (as is generally the case). Where possible, it is recommended 9 * that this class be used in preference to <code>StringBuffer</code> as it will 10 * be faster under most implementations. 11 * 12 * <p> 13 * The principal operations on a <code>StringBuilder</code> are the 14 * <code>append</code> and <code>insert</code> methods, which are overloaded so 15 * as to accept data of any type. Each effectively converts a given datum to a 16 * string and then appends or inserts the characters of that string to the 17 * string builder. The <code>append</code> method always adds these characters 18 * at the end of the builder; the <code>insert</code> method adds the characters 19 * at a specified point. 20 * <p> 21 * For example, if <code>z</code> refers to a string builder object whose 22 * current contents are "<code>start</code>", then the method call 23 * <code>z.append("le")</code> would cause the string builder to contain " 24 * <code>startle</code>", whereas <code>z.insert(4, "le")</code> would alter the 25 * string builder to contain "<code>starlet</code>". 26 * <p> 27 * In general, if sb refers to an instance of a <code>StringBuilder</code>, then 28 * <code>sb.append(x)</code> has the same effect as 29 * <code>sb.insert(sb.length(), x)</code>. 30 * 31 * Every string builder has a capacity. As long as the length of the character 32 * sequence contained in the string builder does not exceed the capacity, it is 33 * not necessary to allocate a new internal buffer. If the internal buffer 34 * overflows, it is automatically made larger. 35 * 36 * <p> 37 * Instances of <code>StringBuilder</code> are not safe for use by multiple 38 * threads. If such synchronization is required then it is recommended that 39 * {@link java.lang.StringBuffer} be used. 40 * 41 * @author Michael McCloskey 42 * @version %I%, %G% 43 * @see java.lang.StringBuffer 44 * @see java.lang.String 45 * @since 1.5 46 */ 47 public final class StringBuilder extends AbstractStringBuilder implements 48 java.io.Serializable, CharSequence { 49 50 /** use serialVersionUID for interoperability */ 51 static final long serialVersionUID = 4383685877147921099L; 52 53 /** 54 * Constructs a string builder with no characters in it and an initial 55 * capacity of 16 characters. 56 */ 57 public StringBuilder() { 58 super(16); 59 } 60 61 /** 62 * Constructs a string builder with no characters in it and an initial 63 * capacity specified by the <code>capacity</code> argument. 64 * 65 * @param capacity 66 * the initial capacity. 67 * @throws NegativeArraySizeException 68 * if the <code>capacity</code> argument is less than 69 * <code>0</code>. 70 */ 71 public StringBuilder(int capacity) { 72 super(capacity); 73 } 74 75 /** 76 * Constructs a string builder initialized to the contents of the specified 77 * string. The initial capacity of the string builder is <code>16</code> 78 * plus the length of the string argument. 79 * 80 * @param str 81 * the initial contents of the buffer. 82 * @throws NullPointerException 83 * if <code>str</code> is <code>null</code> 84 */ 85 public StringBuilder(String str) { 86 super(str.length() + 16); 87 append(str); 88 } 89 90 /** 91 * Constructs a string builder that contains the same characters as the 92 * specified <code>CharSequence</code>. The initial capacity of the string 93 * builder is <code>16</code> plus the length of the 94 * <code>CharSequence</code> argument. 95 * 96 * @param seq 97 * the sequence to copy. 98 * @throws NullPointerException 99 * if <code>seq</code> is <code>null</code> 100 */ 101 public StringBuilder(CharSequence seq) { 102 this(seq.length() + 16); 103 append(seq); 104 } 105 106 /** 107 * @see java.lang.String#valueOf(java.lang.Object) 108 * @see #append(java.lang.String) 109 */ 110 public StringBuilder append(Object obj) { 111 return append(String.valueOf(obj)); 112 } 113 114 public StringBuilder append(String str) { 115 super.append(str); 116 return this; 117 } 118 119 // Appends the specified string builder to this sequence. 120 private StringBuilder append(StringBuilder sb) { 121 if (sb == null) 122 return append("null"); 123 int len = sb.length(); 124 int newcount = count + len; 125 if (newcount > value.length) 126 expandCapacity(newcount); 127 sb.getChars(0, len, value, count); 128 count = newcount; 129 return this; 130 } 131 132 /** 133 * Appends the specified <tt>StringBuffer</tt> to this sequence. 134 * <p> 135 * The characters of the <tt>StringBuffer</tt> argument are appended, in 136 * order, to this sequence, increasing the length of this sequence by the 137 * length of the argument. If <tt>sb</tt> is <tt>null</tt>, then the four 138 * characters <tt>"null"</tt> are appended to this sequence. 139 * <p> 140 * Let <i>n</i> be the length of this character sequence just prior to 141 * execution of the <tt>append</tt> method. Then the character at index 142 * <i>k</i> in the new character sequence is equal to the character at index 143 * <i>k</i> in the old character sequence, if <i>k</i> is less than 144 * <i>n</i>; otherwise, it is equal to the character at index <i>k-n</i> in 145 * the argument <code>sb</code>. 146 * 147 * @param sb 148 * the <tt>StringBuffer</tt> to append. 149 * @return a reference to this object. 150 */ 151 public StringBuilder append(StringBuffer sb) { 152 super.append(sb); 153 return this; 154 } 155 156 /** 157 * @throws IndexOutOfBoundsException 158 * {@inheritDoc} 159 */ 160 public StringBuilder append(CharSequence s) { 161 if (s == null) 162 s = "null"; 163 if (s instanceof String) 164 return this.append((String) s); 165 if (s instanceof StringBuffer) 166 return this.append((StringBuffer) s); 167 if (s instanceof StringBuilder) 168 return this.append((StringBuilder) s); 169 return this.append(s, 0, s.length()); 170 } 171 172 /** 173 * @throws IndexOutOfBoundsException 174 * {@inheritDoc} 175 */ 176 public StringBuilder append(CharSequence s, int start, int end) { 177 super.append(s, start, end); 178 return this; 179 } 180 181 public StringBuilder append(char str[]) { 182 super.append(str); 183 return this; 184 } 185 186 public StringBuilder append(char str[], int offset, int len) { 187 super.append(str, offset, len); 188 return this; 189 } 190 191 /** 192 * @see java.lang.String#valueOf(boolean) 193 * @see #append(java.lang.String) 194 */ 195 public StringBuilder append(boolean b) { 196 super.append(b); 197 return this; 198 } 199 200 public StringBuilder append(char c) { 201 super.append(c); 202 return this; 203 } 204 205 /** 206 * @see java.lang.String#valueOf(int) 207 * @see #append(java.lang.String) 208 */ 209 public StringBuilder append(int i) { 210 super.append(i); 211 return this; 212 } 213 214 /** 215 * @see java.lang.String#valueOf(long) 216 * @see #append(java.lang.String) 217 */ 218 public StringBuilder append(long lng) { 219 super.append(lng); 220 return this; 221 } 222 223 /** 224 * @see java.lang.String#valueOf(float) 225 * @see #append(java.lang.String) 226 */ 227 public StringBuilder append(float f) { 228 super.append(f); 229 return this; 230 } 231 232 /** 233 * @see java.lang.String#valueOf(double) 234 * @see #append(java.lang.String) 235 */ 236 public StringBuilder append(double d) { 237 super.append(d); 238 return this; 239 } 240 241 /** 242 * @since 1.5 243 */ 244 public StringBuilder appendCodePoint(int codePoint) { 245 super.appendCodePoint(codePoint); 246 return this; 247 } 248 249 /** 250 * @throws StringIndexOutOfBoundsException 251 * {@inheritDoc} 252 */ 253 public StringBuilder delete(int start, int end) { 254 super.delete(start, end); 255 return this; 256 } 257 258 /** 259 * @throws StringIndexOutOfBoundsException 260 * {@inheritDoc} 261 */ 262 public StringBuilder deleteCharAt(int index) { 263 super.deleteCharAt(index); 264 return this; 265 } 266 267 /** 268 * @throws StringIndexOutOfBoundsException 269 * {@inheritDoc} 270 */ 271 public StringBuilder replace(int start, int end, String str) { 272 super.replace(start, end, str); 273 return this; 274 } 275 276 /** 277 * @throws StringIndexOutOfBoundsException 278 * {@inheritDoc} 279 */ 280 public StringBuilder insert(int index, char str[], int offset, int len) { 281 super.insert(index, str, offset, len); 282 return this; 283 } 284 285 /** 286 * @throws StringIndexOutOfBoundsException 287 * {@inheritDoc} 288 * @see java.lang.String#valueOf(java.lang.Object) 289 * @see #insert(int, java.lang.String) 290 * @see #length() 291 */ 292 public StringBuilder insert(int offset, Object obj) { 293 return insert(offset, String.valueOf(obj)); 294 } 295 296 /** 297 * @throws StringIndexOutOfBoundsException 298 * {@inheritDoc} 299 * @see #length() 300 */ 301 public StringBuilder insert(int offset, String str) { 302 super.insert(offset, str); 303 return this; 304 } 305 306 /** 307 * @throws StringIndexOutOfBoundsException 308 * {@inheritDoc} 309 */ 310 public StringBuilder insert(int offset, char str[]) { 311 super.insert(offset, str); 312 return this; 313 } 314 315 /** 316 * @throws IndexOutOfBoundsException 317 * {@inheritDoc} 318 */ 319 public StringBuilder insert(int dstOffset, CharSequence s) { 320 if (s == null) 321 s = "null"; 322 if (s instanceof String) 323 return this.insert(dstOffset, (String) s); 324 return this.insert(dstOffset, s, 0, s.length()); 325 } 326 327 /** 328 * @throws IndexOutOfBoundsException 329 * {@inheritDoc} 330 */ 331 public StringBuilder insert(int dstOffset, CharSequence s, int start, 332 int end) { 333 super.insert(dstOffset, s, start, end); 334 return this; 335 } 336 337 /** 338 * @throws StringIndexOutOfBoundsException 339 * {@inheritDoc} 340 * @see java.lang.String#valueOf(boolean) 341 * @see #insert(int, java.lang.String) 342 * @see #length() 343 */ 344 public StringBuilder insert(int offset, boolean b) { 345 super.insert(offset, b); 346 return this; 347 } 348 349 /** 350 * @throws IndexOutOfBoundsException 351 * {@inheritDoc} 352 * @see #length() 353 */ 354 public StringBuilder insert(int offset, char c) { 355 super.insert(offset, c); 356 return this; 357 } 358 359 /** 360 * @throws StringIndexOutOfBoundsException 361 * {@inheritDoc} 362 * @see java.lang.String#valueOf(int) 363 * @see #insert(int, java.lang.String) 364 * @see #length() 365 */ 366 public StringBuilder insert(int offset, int i) { 367 return insert(offset, String.valueOf(i)); 368 } 369 370 /** 371 * @throws StringIndexOutOfBoundsException 372 * {@inheritDoc} 373 * @see java.lang.String#valueOf(long) 374 * @see #insert(int, java.lang.String) 375 * @see #length() 376 */ 377 public StringBuilder insert(int offset, long l) { 378 return insert(offset, String.valueOf(l)); 379 } 380 381 /** 382 * @throws StringIndexOutOfBoundsException 383 * {@inheritDoc} 384 * @see java.lang.String#valueOf(float) 385 * @see #insert(int, java.lang.String) 386 * @see #length() 387 */ 388 public StringBuilder insert(int offset, float f) { 389 return insert(offset, String.valueOf(f)); 390 } 391 392 /** 393 * @throws StringIndexOutOfBoundsException 394 * {@inheritDoc} 395 * @see java.lang.String#valueOf(double) 396 * @see #insert(int, java.lang.String) 397 * @see #length() 398 */ 399 public StringBuilder insert(int offset, double d) { 400 return insert(offset, String.valueOf(d)); 401 } 402 403 /** 404 * @throws NullPointerException 405 * {@inheritDoc} 406 */ 407 public int indexOf(String str) { 408 return indexOf(str, 0); 409 } 410 411 /** 412 * @throws NullPointerException 413 * {@inheritDoc} 414 */ 415 public int indexOf(String str, int fromIndex) { 416 return String.indexOf(value, 0, count, str.toCharArray(), 0, 417 str.length(), fromIndex); 418 } 419 420 /** 421 * @throws NullPointerException 422 * {@inheritDoc} 423 */ 424 public int lastIndexOf(String str) { 425 return lastIndexOf(str, count); 426 } 427 428 /** 429 * @throws NullPointerException 430 * {@inheritDoc} 431 */ 432 public int lastIndexOf(String str, int fromIndex) { 433 return String.lastIndexOf(value, 0, count, str.toCharArray(), 0, 434 str.length(), fromIndex); 435 } 436 437 public StringBuilder reverse() { 438 super.reverse(); 439 return this; 440 } 441 442 public String toString() { 443 // Create a copy, don‘t share the array 444 return new String(value, 0, count); 445 } 446 447 /** 448 * Save the state of the <tt>StringBuilder</tt> instance to a stream (that 449 * is, serialize it). 450 * 451 * @serialData the number of characters currently stored in the string 452 * builder (<tt>int</tt>), followed by the characters in the 453 * string builder (<tt>char[]</tt>). The length of the 454 * <tt>char</tt> array may be greater than the number of 455 * characters currently stored in the string builder, in which 456 * case extra characters are ignored. 457 */ 458 private void writeObject(java.io.ObjectOutputStream s) 459 throws java.io.IOException { 460 s.defaultWriteObject(); 461 s.writeInt(count); 462 s.writeObject(value); 463 } 464 465 /** 466 * readObject is called to restore the state of the StringBuffer from a 467 * stream. 468 */ 469 private void readObject(java.io.ObjectInputStream s) 470 throws java.io.IOException, ClassNotFoundException { 471 s.defaultReadObject(); 472 count = s.readInt(); 473 value = http://www.mamicode.com/(char[]) s.readObject(); 474 } 475 476 }
java.lang.StringBuilder
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。