How to Repeat a String in Java

The challenge

Write a function called repeat_str which repeats the given string src exactly count times.

repeatStr(6, "I") // "IIIIII" repeatStr(5, "Hello") // "HelloHelloHelloHelloHello"
Code language: Java (java)

The solution in Java

Java comes with a built-in on the String class. Called repeat, which allows you to very easily repeat that string n number of times.

"Hello".repeat(2); // "HelloHello"
Code language: Java (java)

Using String::repeat()

Therefore, we could solve our above problem as follows:

class Solution { static String repeatStr(int repeat, String string) { return string.repeat(repeat); } }
Code language: Java (java)

Obviously, we probably want to validate our input before we just do it, so maybe wrap it in a ternary:

public class Solution { public static String repeatStr(final int repeat, final String string) { return repeat >= 0 ? string.repeat(repeat) : ""; } }
Code language: Java (java)

Write all the code yourself?

Alternatively, you could always just write the method yourself, doing something like this:

public class Solution { public static String repeatStr(final int repeat, final String string) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < repeat; i++) { sb.append(string); } return sb.toString(); } }
Code language: Java (java)

Or maybe with less code, like this:

public class Solution { public static String repeatStr(final int repeat, final String string) { String s = ""; for (int i = 0; i < repeat; i++) s += string; return s; } }
Code language: Java (java)

Java 8 and above

If you’re feeling Java8 and above thoughts, you could always do this:

public class Solution { public static String repeatStr(final int repeat, final String string) { return java.util.stream.IntStream.range(0, repeat).mapToObj(i -> string) .collect(java.util.stream.Collectors.joining()).toString(); } }
Code language: Java (java)

Or maybe combine it with the Collections nCopies possible solution:

import java.util.Collections; public class Solution { public static String repeatStr(final int repeat, final String string) { return repeat < 0 ? "" : String.join("", Collections.nCopies(repeat, string)); } }
Code language: Java (java)

Test cases to validate

It’s always important to have some tests which will help us validate our application code.

import org.junit.Test; import static org.junit.Assert.assertEquals; import java.util.Random; public class SolutionTest { @Test public void test4a() { assertEquals("aaaa", Solution.repeatStr(4, "a")); } @Test public void test3Hello() { assertEquals("HelloHelloHello", Solution.repeatStr(3, "Hello")); } @Test public void test5empty() { assertEquals("", Solution.repeatStr(5, "")); } @Test public void test0a() { assertEquals("", Solution.repeatStr(0, "kata")); } private final char[] characters = "a[email protected]#$%^&*()-=_+[]{}|;:,.<>/?`~".toCharArray(); @Test public void testRandom() { final Random rand = new Random(); for (int testIteration = 0; testIteration < 10; ++testIteration) { final StringBuilder text = new StringBuilder(rand.nextInt(32)); for (int i = 0; i < text.capacity(); ++i) { final int chi = rand.nextInt(characters.length); text.append(characters[chi]); } final String string = text.toString(); final int timesToRepeat = rand.nextInt(32); final StringBuilder sb = new StringBuilder(timesToRepeat * string.length()); for (int i = 0; i < timesToRepeat; ++i) { sb.append(text); } final String expected = sb.toString(); assertEquals(expected, Solution.repeatStr(timesToRepeat, string)); } } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments