diff --git a/java-strings-3/README.md b/java-strings-3/README.md
new file mode 100644
index 0000000000..6c2339028f
--- /dev/null
+++ b/java-strings-3/README.md
@@ -0,0 +1,3 @@
+## Relevant Articles:
+
+- [Converting Java String to Double](https://www.baeldung.com/java-string-to-double)
diff --git a/java-strings-3/pom.xml b/java-strings-3/pom.xml
new file mode 100644
index 0000000000..1e5f757943
--- /dev/null
+++ b/java-strings-3/pom.xml
@@ -0,0 +1,155 @@
+
+ 4.0.0
+ java-strings-3
+ 0.1.0-SNAPSHOT
+ jar
+ java-strings-3
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh-core.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh-core.version}
+
+
+ com.ibm.icu
+ icu4j
+ ${icu4j.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+ commons-codec
+ commons-codec
+ ${commons-codec.version}
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+ org.hamcrest
+ hamcrest-library
+ ${org.hamcrest.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ org.passay
+ passay
+ ${passay.version}
+
+
+ org.apache.commons
+ commons-text
+ ${commons-text.version}
+
+
+ com.vdurmont
+ emoji-java
+ ${emoji-java.version}
+
+
+ org.ahocorasick
+ ahocorasick
+ ${ahocorasick.version}
+
+
+ javax.validation
+ validation-api
+ ${validation-api.version}
+
+
+ org.hibernate.validator
+ hibernate-validator
+ ${hibernate-validator.version}
+
+
+ javax.el
+ javax.el-api
+ ${javax.el-api.version}
+
+
+ org.glassfish.web
+ javax.el
+ ${javax.el.version}
+
+
+
+
+ java-strings-3
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${java.version}
+ ${java.version}
+ -parameters
+
+
+
+
+
+
+ 3.8.1
+ 1.10
+ 1.3.1
+
+ 3.6.1
+ 4.0.0
+ 0.4.0
+ 61.1
+ 28.0-jre
+ 1.4
+ 2.0.0.Final
+ 6.0.2.Final
+ 3.0.0
+ 2.2.6
+
+
+
\ No newline at end of file
diff --git a/java-strings-3/src/main/java/com/baeldung/string/README.md b/java-strings-3/src/main/java/com/baeldung/string/README.md
new file mode 100644
index 0000000000..e02980e93f
--- /dev/null
+++ b/java-strings-3/src/main/java/com/baeldung/string/README.md
@@ -0,0 +1,3 @@
+This file exists to ensure this empty directory is committed in Git.
+
+Please remove this file when this directory is populated.
\ No newline at end of file
diff --git a/java-strings-3/src/main/resources/.gitignore b/java-strings-3/src/main/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/java-strings-3/src/main/resources/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/java-strings-2/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java b/java-strings-3/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java
similarity index 97%
rename from java-strings-2/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java
rename to java-strings-3/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java
index 9abb7ac453..2c87af53f8 100644
--- a/java-strings-2/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java
+++ b/java-strings-3/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java
@@ -1,56 +1,56 @@
-package com.baeldung.string.todouble;
-
-import static org.junit.Assert.assertEquals;
-
-import java.text.DecimalFormat;
-import java.text.ParseException;
-
-import org.junit.Test;
-
-public class StringToDoubleConversionUnitTest {
-
- @Test
- public void givenValidString_WhenParseDouble_ThenResultIsPrimitiveDouble() {
- assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);
- }
-
- @Test(expected = NullPointerException.class)
- public void givenNullString_WhenParseDouble_ThenNullPointerExceptionIsThrown() {
- Double.parseDouble(null);
- }
-
- @Test(expected = NumberFormatException.class)
- public void givenInalidString_WhenParseDouble_ThenNumberFormatExceptionIsThrown() {
- Double.parseDouble("&");
- }
-
- @Test
- public void givenValidString_WhenValueOf_ThenResultIsPrimitiveDouble() {
- assertEquals(1.23, Double.valueOf("1.23"), 0.000001);
- }
-
- @Test(expected = NullPointerException.class)
- public void givenNullString_WhenValueOf_ThenNullPointerExceptionIsThrown() {
- Double.valueOf(null);
- }
-
- @Test(expected = NumberFormatException.class)
- public void givenInalidString_WhenValueOf_ThenNumberFormatExceptionIsThrown() {
- Double.valueOf("&");
- }
-
- @Test
- public void givenValidString_WhenDecimalFormat_ThenResultIsValidDouble() throws ParseException {
- assertEquals(1.23, new DecimalFormat("#").parse("1.23").doubleValue(), 0.000001);
- }
-
- @Test(expected = NullPointerException.class)
- public void givenNullString_WhenDecimalFormat_ThenNullPointerExceptionIsThrown() throws ParseException {
- new DecimalFormat("#").parse(null);
- }
-
- @Test(expected = ParseException.class)
- public void givenInvalidString_WhenDecimalFormat_ThenParseExceptionIsThrown() throws ParseException {
- new DecimalFormat("#").parse("&");
- }
-}
+package com.baeldung.string.todouble;
+
+import static org.junit.Assert.assertEquals;
+
+import java.text.DecimalFormat;
+import java.text.ParseException;
+
+import org.junit.Test;
+
+public class StringToDoubleConversionUnitTest {
+
+ @Test
+ public void givenValidString_WhenParseDouble_ThenResultIsPrimitiveDouble() {
+ assertEquals(1.23, Double.parseDouble("1.23"), 0.000001);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void givenNullString_WhenParseDouble_ThenNullPointerExceptionIsThrown() {
+ Double.parseDouble(null);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void givenInalidString_WhenParseDouble_ThenNumberFormatExceptionIsThrown() {
+ Double.parseDouble("&");
+ }
+
+ @Test
+ public void givenValidString_WhenValueOf_ThenResultIsPrimitiveDouble() {
+ assertEquals(1.23, Double.valueOf("1.23"), 0.000001);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void givenNullString_WhenValueOf_ThenNullPointerExceptionIsThrown() {
+ Double.valueOf(null);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void givenInalidString_WhenValueOf_ThenNumberFormatExceptionIsThrown() {
+ Double.valueOf("&");
+ }
+
+ @Test
+ public void givenValidString_WhenDecimalFormat_ThenResultIsValidDouble() throws ParseException {
+ assertEquals(1.23, new DecimalFormat("#").parse("1.23").doubleValue(), 0.000001);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void givenNullString_WhenDecimalFormat_ThenNullPointerExceptionIsThrown() throws ParseException {
+ new DecimalFormat("#").parse(null);
+ }
+
+ @Test(expected = ParseException.class)
+ public void givenInvalidString_WhenDecimalFormat_ThenParseExceptionIsThrown() throws ParseException {
+ new DecimalFormat("#").parse("&");
+ }
+}
diff --git a/java-strings-3/src/test/resources/.gitignore b/java-strings-3/src/test/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/java-strings-3/src/test/resources/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index b60d7ae4e6..afe165cf4d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -469,6 +469,7 @@
java-strings
java-strings-2
+ java-strings-3
java-strings-ops
java-vavr-stream
java-websocket
@@ -1164,6 +1165,7 @@
java-strings
java-strings-2
+ java-strings-3
java-strings-ops
java-vavr-stream
java-websocket