mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8197594: String#repeat
Reviewed-by: smarks, psandoz, plevart, rriggs, redestad
This commit is contained in:
parent
95b1eef0da
commit
b4d4d8f66c
2 changed files with 183 additions and 0 deletions
|
@ -2963,6 +2963,56 @@ public final class String
|
|||
*/
|
||||
public native String intern();
|
||||
|
||||
/**
|
||||
* Returns a string whose value is the concatenation of this
|
||||
* string repeated {@code count} times.
|
||||
* <p>
|
||||
* If this string is empty or count is zero then the empty
|
||||
* string is returned.
|
||||
*
|
||||
* @param count number of times to repeat
|
||||
*
|
||||
* @return A string composed of this string repeated
|
||||
* {@code count} times or the empty string if this
|
||||
* string is empty or count is zero
|
||||
*
|
||||
* @throws IllegalArgumentException if the {@code count} is
|
||||
* negative.
|
||||
*
|
||||
* @since 11
|
||||
*/
|
||||
public String repeat(int count) {
|
||||
if (count < 0) {
|
||||
throw new IllegalArgumentException("count is negative: " + count);
|
||||
}
|
||||
if (count == 1) {
|
||||
return this;
|
||||
}
|
||||
final int len = value.length;
|
||||
if (len == 0 || count == 0) {
|
||||
return "";
|
||||
}
|
||||
if (len == 1) {
|
||||
final byte[] single = new byte[count];
|
||||
Arrays.fill(single, value[0]);
|
||||
return new String(single, coder);
|
||||
}
|
||||
if (Integer.MAX_VALUE / count < len) {
|
||||
throw new OutOfMemoryError("Repeating " + len + " bytes String " + count +
|
||||
" times will produce a String exceeding maximum size.");
|
||||
}
|
||||
final int limit = len * count;
|
||||
final byte[] multiple = new byte[limit];
|
||||
System.arraycopy(value, 0, multiple, 0, len);
|
||||
int copied = len;
|
||||
for (int next = copied << 1; next < limit && 0 < next; next = next << 1) {
|
||||
System.arraycopy(multiple, 0, multiple, copied, copied);
|
||||
copied = next;
|
||||
}
|
||||
System.arraycopy(multiple, 0, multiple, copied, limit - copied);
|
||||
return new String(multiple, coder);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue