< prev index next >
src/java.base/share/classes/java/lang/String.java
Print this page
rev 49004 : 8197594: String#repeat
@@ -2961,10 +2961,56 @@
* guaranteed to be from a pool of unique strings.
* @jls 3.10.5 String Literals
*/
public native String intern();
+ /**
+ * Returns a string whose value is the concatenation of this
+ * string repeated {@code count} times.
+ * <p>
+ * If count or length is zero then the empty string is returned.
+ * <p>
+ * This method may be used to create space padding for
+ * formatting text or zero padding for formatting numbers.
+ * @param count number of times to repeat
+ * @return A string composed of this string repeated
+ * {@code count} times or the empty string if count
+ * or length is zero.
+ * @throws IllegalArgumentException if the {@code count} is
+ * negative.
+ */
+ 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();
+ }
+ 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);
+ }
+
////////////////////////////////////////////////////////////////
/**
* Copy character bytes from this string into dst starting at dstBegin.
* This method doesn't perform any range checking.
< prev index next >