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();
  }
}

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();
  }
}

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(""));
  }
}

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());
    }
  }
}