How to Build Strings from a Size in Java

The challenge

Write a function stringy that takes a size and returns a string of alternating '1s' and '0s'.

The string should start with a 1.

A string with size 6 should return :'101010'.

With size 4 should return : '1010'.

With size 12 should return : '101010101010'.

The size will always be positive and will only use whole numbers.

The solution in Java code

public class Solution { public static String stringy(int size) { int last = 1; StringBuilder sb = new StringBuilder(); for (int i=0; i<size; i++) { sb.append(last); last = last==0 ? 1 : 0; } return sb.toString(); } }
Code language: Java (java)

We could make this a little simpler by doing the following:

public class Solution { public static String stringy(int size) { StringBuilder sb = new StringBuilder(); for (int i = 1; i < size + 1; i++) sb.append(i & 1); return sb.toString(); } }
Code language: Java (java)

An alternative solution using IntStream:

import java.util.stream.IntStream; import java.util.stream.Collectors; public class Solution { public static String stringy(int size) { return IntStream.rangeClosed(1, size) .map(i -> i % 2) .mapToObj(String::valueOf) .collect(Collectors.joining("")); } }
Code language: Java (java)

Test cases to validate our Java code

import org.junit.Test; import static org.junit.Assert.assertEquals; import java.util.Random; public class StringyExampleTests { @Test public void startTest() { assertEquals("Your string should start with a 1", '1', Solution.stringy(3).charAt(0)); } @Test public void lengthTests() { Random randGen = new Random(); for (int i = 0; i < 10; i++) { int size = randGen.nextInt(50); assertEquals("Wrong length using size " + size, size, Solution.stringy(size).length()); } } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments