The challenge
Complete the method/function so that it converts dash/underscore delimited words into camel casing. The first word within the output should be capitalized only if the original word was capitalized (known as Upper Camel Case, also often referred to as Pascal case).
Examples
toCamelCase("the-stealth-warrior"); // returns "theStealthWarrior" toCamelCase("The_Stealth_Warrior"); // returns "TheStealthWarrior"
Test cases
import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; public class SolutionTest { @Test public void testSomeUnderscoreLowerStart() { String input = "the_Stealth_Warrior"; System.out.println("input: "+input); assertEquals("theStealthWarrior", Solution.toCamelCase(input)); } @Test public void testSomeDashLowerStart() { String input = "the-Stealth-Warrior"; System.out.println("input: "+input); assertEquals("theStealthWarrior", Solution.toCamelCase(input)); } }
The solution in Java
import java.lang.StringBuilder; class Solution{ // Our method static String toCamelCase(String s){ // create a StringBuilder to create our output string StringBuilder sb = new StringBuilder(); // determine when the next capital letter will be Boolean nextCapital = false; // loop through the string for (int i=0; i<s.length(); i++) { // if the current character is a letter if (Character.isLetter(s.charAt(i))) { // get the current character char tmp = s.charAt(i); // make it a capital if required if (nextCapital) tmp = Character.toUpperCase(tmp); // add it to our output string sb.append(tmp); // make sure the next character isn't a capital nextCapital = false; } else { // otherwise the next letter should be a capital nextCapital = true; } } // return our output string return sb.toString(); } }