The challenge
Split a given string into different strings of equal size.
Example:
Split the below string into other strings of size #3
'supercalifragilisticexpialidocious'
Will return a new string
'sup erc ali fra gil ist ice xpi ali doc iou s'
Assumptions:
String length is always greater than 0
String has no spaces
Size is always positive
The solution in Java code
Option 1:
public class InParts {
public static String splitInParts(String s, int partLength) {
StringBuilder sb = new StringBuilder();
char[] c = s.toCharArray();
int k = 0;
for (int i=0; i<c.length; i++) {
sb.append(c[i]);
if (k==partLength-1) {
sb.append(" ");
k = -1;
}
k++;
}
return sb.toString().trim();
}
}
Option 2:
public class InParts {
public static String splitInParts(String s, int partLength) {
StringBuilder sb = new StringBuilder(s);
for (int i = partLength++; i < sb.length(); i += partLength){
sb.insert(i, " ");
}
return sb.toString();
}
}
Option 3:
public class InParts {
public static String splitInParts(String s, int partLength) {
return s.replaceAll("(.{"+partLength+"})(?!$)", "$1 ");
}
}
Test cases to validate our solution
import static org.junit.Assert.*;
import org.junit.Test;
public class InPartsTest {
private static void testing(String actual, String expected) {
assertEquals(expected, actual);
}
@Test
public void test() {
System.out.println("Fixed Tests splitInParts");
String ans = InParts.splitInParts("supercalifragilisticexpialidocious", 3);
String sol = "sup erc ali fra gil ist ice xpi ali doc iou s";
testing(ans, sol);
ans = InParts.splitInParts("HelloDude", 3);
sol = "Hel loD ude";
testing(ans, sol);
ans = InParts.splitInParts("HelloDude", 1);
sol = "H e l l o D u d e";
testing(ans, sol);
ans = InParts.splitInParts("HelloDude", 9);
sol = "HelloDude";
testing(ans, sol);
}
}