diff --git a/core-java-modules/core-java-string-conversions-2/pom.xml b/core-java-modules/core-java-string-conversions-2/pom.xml
index 8a222a6b5d..584c808f56 100644
--- a/core-java-modules/core-java-string-conversions-2/pom.xml
+++ b/core-java-modules/core-java-string-conversions-2/pom.xml
@@ -33,7 +33,39 @@
${hamcrest.version}
test
+
+
+ com.ibm.icu
+ icu4j
+ ${icu.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+ org.apache.commons
+ commons-text
+ ${commons-text.version}
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+ 64.2
+ 3.12.2
+ 1.9
+ 30.1.1-jre
+
core-java-string-conversions-2
diff --git a/core-java-modules/core-java-string-conversions-2/src/main/java/com/baeldung/stringtocamelcase/StringToCamelCase.java b/core-java-modules/core-java-string-conversions-2/src/main/java/com/baeldung/stringtocamelcase/StringToCamelCase.java
new file mode 100644
index 0000000000..7a4369ac4a
--- /dev/null
+++ b/core-java-modules/core-java-string-conversions-2/src/main/java/com/baeldung/stringtocamelcase/StringToCamelCase.java
@@ -0,0 +1,109 @@
+package com.baeldung.stringtocamelcase;
+
+import com.google.common.base.CaseFormat;
+import com.ibm.icu.lang.UCharacter;
+import com.ibm.icu.text.BreakIterator;
+import org.apache.commons.text.CaseUtils;
+import org.apache.commons.text.WordUtils;
+
+import java.util.Arrays;
+import java.util.stream.Collectors;
+
+public class StringToCamelCase {
+
+ public static String toCamelCaseByIteration(String text, char delimiter) {
+ if (text == null || text.isEmpty()) {
+ return text;
+ }
+ boolean shouldConvertNextCharToLower = true;
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < text.length(); i++) {
+ char currentChar = text.charAt(i);
+ if (currentChar == delimiter) {
+ shouldConvertNextCharToLower = false;
+ } else if (shouldConvertNextCharToLower) {
+ builder.append(Character.toLowerCase(currentChar));
+ } else {
+ builder.append(Character.toUpperCase(currentChar));
+ shouldConvertNextCharToLower = true;
+ }
+ }
+ return builder.toString();
+ }
+
+ public static String toCamelCaseBySplitting(String text, String delimiter) {
+ if (text == null || text.isEmpty()) {
+ return text;
+ }
+ String[] words = text.split(delimiter);
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0, wordsLength = words.length; i < wordsLength; i++) {
+ String word = words[i];
+ if (i == 0) {
+ //Make the first word all lowercase
+ word = word.isEmpty() ? word : word.toLowerCase();
+ } else {
+ //Convert the first character to Uppercase and others to lowercase
+ // e.g sTRING =====> String
+ word = word.isEmpty() ? word : Character.toUpperCase(word.charAt(0)) + word.substring(1).toLowerCase();
+ }
+ builder.append(word);
+ }
+ return builder.toString();
+ }
+
+ public static String toCamelCaseBySplittingUsingStreams(String text, String delimiter) {
+ if (text == null || text.isEmpty()) {
+ return text;
+ }
+ String[] words = text.split(delimiter);
+ //Convert the first word to lowercase and then every
+ //other word to Title Case.
+ String firstWord = words[0].toLowerCase();
+ String otherWords = Arrays.stream(words, 1, words.length)
+ .filter(word -> !word.isEmpty())
+ .map(word -> Character.toUpperCase(word.charAt(0)) + word.substring(1).toLowerCase())
+ .collect(Collectors.joining(""));
+
+ return firstWord + otherWords;
+ }
+
+ public static String toCamelCaseByRegex(String text) {
+ StringBuilder builder = new StringBuilder();
+ String[] words = text.split("[\\W_]+");
+ for (int i = 0; i < words.length; i++) {
+ String word = words[i];
+ if (i == 0) {
+ word = word.isEmpty() ? word : word.toLowerCase();
+ } else {
+ word = word.isEmpty() ? word : Character.toUpperCase(word.charAt(0)) + word.substring(1).toLowerCase();
+ }
+ builder.append(word);
+ }
+ return builder.toString();
+ }
+
+ //Third-Party Libraries
+ public static String toCamelCaseUsingICU4J(String text, String delimiter) {
+ if (text == null || text.isEmpty()) {
+ return text;
+ }
+ text = UCharacter.toTitleCase(text, BreakIterator.getTitleInstance()).replaceAll(delimiter, "");
+ StringBuilder builder = new StringBuilder(text);
+ builder.setCharAt(0, Character.toLowerCase(text.charAt(0)));
+ return builder.toString();
+ }
+
+ public static String toCamelCaseUsingGuava(String text, String delimiter) {
+ String toUpperUnderscore = text.toUpperCase().replaceAll(delimiter, "_");
+ return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, toUpperUnderscore);
+ }
+
+ public static String toCamelCaseUsingApacheCommons(String text, char delimiter) {
+ text = WordUtils.capitalizeFully(text, delimiter).replaceAll(String.valueOf(delimiter), "");
+ StringBuilder builder = new StringBuilder(text);
+ builder.setCharAt(0, Character.toLowerCase(text.charAt(0)));
+ return builder.toString();
+ }
+
+}
diff --git a/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtocamelcase/StringToCamelCaseUnitTest.java b/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtocamelcase/StringToCamelCaseUnitTest.java
new file mode 100644
index 0000000000..3adc4434a9
--- /dev/null
+++ b/core-java-modules/core-java-string-conversions-2/src/test/java/com/baeldung/stringtocamelcase/StringToCamelCaseUnitTest.java
@@ -0,0 +1,111 @@
+package com.baeldung.stringtocamelcase;
+
+
+import com.google.common.base.CaseFormat;
+import org.apache.commons.text.CaseUtils;
+import org.junit.Test;
+
+import static com.baeldung.stringtocamelcase.StringToCamelCase.*;
+import static org.assertj.core.api.Assertions.*;
+
+
+public class StringToCamelCaseUnitTest {
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseByIteration_ThenReturnCamelCase() {
+ assertThat(toCamelCaseByIteration("THIS STRING SHOULD BE IN CAMEL CASE", ' ')).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseByIteration_ThenReturnCamelCase() {
+ assertThat(toCamelCaseByIteration("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", '_')).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseBySplitting_ThenReturnCamelCase() {
+ assertThat(toCamelCaseBySplitting("THIS STRING SHOULD BE IN CAMEL CASE", " ")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseBySplitting_ThenReturnCamelCase() {
+ assertThat(toCamelCaseBySplitting("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", "_")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseBySplittingUsingStreams_ThenReturnCamelCase() {
+ assertThat(toCamelCaseBySplittingUsingStreams("THIS STRING SHOULD BE IN CAMEL CASE", " ")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseBySplittingUsingStreams_ThenReturnCamelCase() {
+ assertThat(toCamelCaseBySplittingUsingStreams("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", "_")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseUsingApacheCommonsText_ThenReturnCamelCase() {
+ assertThat(CaseUtils.toCamelCase("THIS STRING SHOULD BE IN CAMEL CASE", false, ' '))
+ .isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseUsingApacheCommonsText_ThenReturnCamelCase() {
+ assertThat(CaseUtils.toCamelCase("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", false, '_'))
+ .isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseUsingICU4J_ThenReturnCamelCase() {
+ assertThat(toCamelCaseUsingICU4J("THIS STRING SHOULD BE IN CAMEL CASE", " ")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseUsingICU4J_ThenReturnCamelCase() {
+ assertThat(toCamelCaseUsingICU4J("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", "_")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseUsingGuava_ThenReturnCamelCase() {
+ assertThat(toCamelCaseUsingGuava("THIS STRING SHOULD BE IN CAMEL CASE", " ")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseUsingGuava_ThenReturnCamelCase() {
+ assertThat(toCamelCaseUsingGuava("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", "_")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseUsingApacheCommons_ThenReturnCamelCase() {
+ assertThat(toCamelCaseUsingApacheCommons("THIS STRING SHOULD BE IN CAMEL CASE", ' ')).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithUnderscores_WhenToCamelCaseUsingApacheCommons_ThenReturnCamelCase() {
+ assertThat(toCamelCaseUsingApacheCommons("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE", '_')).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteSpaces_WhenToCamelCaseByRegex_ThenReturnCamelCase() {
+ assertThat(toCamelCaseByRegex("THIS STRING SHOULD BE IN CAMEL CASE")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenStringWithWhiteUnderscores_WhenToCamelCaseByRegex_ThenReturnCamelCase() {
+ assertThat(toCamelCaseByRegex("THIS_STRING_SHOULD_BE_IN_CAMEL_CASE")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenRandomString_WhenToCamelCaseByRegex_ThenReturnCamelCase() {
+ assertThat(toCamelCaseByRegex("Please Turn this56738 to camel Case")).isEqualTo("pleaseTurnThis56738ToCamelCase");
+ }
+
+ @Test
+ public void givenRandomStringWithDifferentDelimiters_WhenToCamelCaseByRegex_ThenReturnCamelCase() {
+ assertThat(toCamelCaseByRegex("Please Turn this56738 to camel Case This should-be_in;camel-case")).isEqualTo("pleaseTurnThis56738ToCamelCaseThisShouldBeInCamelCase");
+ }
+
+ @Test
+ public void givenUppercaseWordWithUnderscores_WhenCaseFormatToLowerCamel_ThenReturnCamelCase() {
+ assertThat(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "THIS_STRING_SHOULD_BE_IN_CAMEL_CASE")).isEqualTo("thisStringShouldBeInCamelCase");
+ }
+
+}