From 978591ef59f5df83b8d812d56ca4f4f74abb335f Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Wed, 19 Sep 2018 10:19:49 +0530 Subject: [PATCH 1/7] BAEL-2159: Mini Article on "Separate double into integer and decimal parts" --- .../doubles/SplitFloatingPointNumbers.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/doubles/SplitFloatingPointNumbers.java diff --git a/core-java/src/main/java/com/baeldung/doubles/SplitFloatingPointNumbers.java b/core-java/src/main/java/com/baeldung/doubles/SplitFloatingPointNumbers.java new file mode 100644 index 0000000000..a28ac3d5a1 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/doubles/SplitFloatingPointNumbers.java @@ -0,0 +1,40 @@ +package com.baeldung.doubles; + +import java.math.BigDecimal; + +public class SplitFloatingPointNumbers { + + public static void main(String[] args) { + + double doubleNumber = 24.04; + splitUsingFloatingTypes(doubleNumber); + splitUsingString(doubleNumber); + splitUsingBigDecimal(doubleNumber); + } + + private static void splitUsingFloatingTypes(double doubleNumber) { + System.out.println("Using Floating Point Arithmetics:"); + int intPart = (int) doubleNumber; + System.out.println("Double Number: "+doubleNumber); + System.out.println("Integer Part: "+ intPart); + System.out.println("Decimal Part: "+ (doubleNumber - intPart)); + } + + private static void splitUsingString(double doubleNumber) { + System.out.println("Using String Operations:"); + String doubleAsString = String.valueOf(doubleNumber); + int indexOfDecimal = doubleAsString.indexOf("."); + System.out.println("Double Number: "+doubleNumber); + System.out.println("Integer Part: "+ doubleAsString.substring(0, indexOfDecimal)); + System.out.println("Decimal Part: "+ doubleAsString.substring(indexOfDecimal)); + } + + private static void splitUsingBigDecimal(double doubleNumber) { + System.out.println("Using BigDecimal Operations:"); + BigDecimal bigDecimal = new BigDecimal(String.valueOf(doubleNumber)); + int intValue = bigDecimal.intValue(); + System.out.println("Double Number: "+bigDecimal.toPlainString()); + System.out.println("Integer Part: "+intValue); + System.out.println("Decimal Part: "+bigDecimal.subtract(new BigDecimal(intValue)).toPlainString()); + } +} From 09261fb3b94b3bc2b67d3f1efd356769df9edad6 Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Mon, 26 Nov 2018 23:02:44 +0530 Subject: [PATCH 2/7] BAEL-2393: Longest Sub-string without repeating characters. --- ...ongestSubstringNonRepeatingCharacters.java | 51 +++++++++++++++++++ ...stSubstringNonRepeatingCharactersTest.java | 20 ++++++++ 2 files changed, 71 insertions(+) create mode 100644 algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java create mode 100644 algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java new file mode 100644 index 0000000000..840b57cd78 --- /dev/null +++ b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java @@ -0,0 +1,51 @@ +package com.baeldung.algorithms.string; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class LongestSubstringNonRepeatingCharacters { + + public static String getNonRepeatingCharactersBruteForce(String input) { + String output = ""; + for (int start = 0; start < input.length(); start++) { + Set visited = new HashSet<>(); + int end = start; + for (; end < input.length(); end++) { + char currChar = input.charAt(end); + if (visited.contains(currChar)) { + break; + } else { + visited.add(currChar); + } + } + if (output.length() < end - start + 1) { + output = input.substring(start, end); + } + } + return output; + } + + public static String getNonRepeatingCharacters(String input) { + Map visited = new HashMap<>(); + String output = ""; + for (int start = 0, end = 0; end < input.length(); end++) { + char currChar = input.charAt(end); + if(visited.containsKey(currChar)) { + start = Math.max(visited.get(currChar)+1, start); + } + if(output.length() < end - start + 1) { + output = input.substring(start, end+1); + } + visited.put(currChar, end); + } + return output; + } + + public static void main(String[] args) { + String input = "CODINGISAWESOME"; + System.out.println(getNonRepeatingCharacters(input)); + } + +} diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java new file mode 100644 index 0000000000..a3e67362ad --- /dev/null +++ b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java @@ -0,0 +1,20 @@ +package com.baeldung.algorithms.string; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class LongestSubstringNonRepeatingCharactersTest { + + @Test + void givenString_whenGetNonRepeatingCharactersBruteForceCalled_thenResultFoundAsExpected() { + String input = "CODINGISAWESOME"; + Assertions.assertEquals("NGISAWE", LongestSubstringNonRepeatingCharacters.getNonRepeatingCharactersBruteForce(input)); + } + + @Test + void givenString_whenGetNonRepeatingCharactersCalled_thenResultFoundAsExpected() { + String input = "CODINGISAWESOME"; + Assertions.assertEquals("NGISAWE",LongestSubstringNonRepeatingCharacters.getNonRepeatingCharacters(input)); + } + +} From ed0713046ffb3dad79611b87a753dad780fce618 Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Sat, 1 Dec 2018 09:08:53 +0530 Subject: [PATCH 3/7] Renamed method names to replace "non-repeating" with "Unique". --- ...ongestSubstringNonRepeatingCharacters.java | 102 +++++++++--------- ...stSubstringNonRepeatingCharactersTest.java | 40 +++---- 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java index 840b57cd78..51ae013cd6 100644 --- a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java +++ b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java @@ -1,51 +1,51 @@ -package com.baeldung.algorithms.string; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -public class LongestSubstringNonRepeatingCharacters { - - public static String getNonRepeatingCharactersBruteForce(String input) { - String output = ""; - for (int start = 0; start < input.length(); start++) { - Set visited = new HashSet<>(); - int end = start; - for (; end < input.length(); end++) { - char currChar = input.charAt(end); - if (visited.contains(currChar)) { - break; - } else { - visited.add(currChar); - } - } - if (output.length() < end - start + 1) { - output = input.substring(start, end); - } - } - return output; - } - - public static String getNonRepeatingCharacters(String input) { - Map visited = new HashMap<>(); - String output = ""; - for (int start = 0, end = 0; end < input.length(); end++) { - char currChar = input.charAt(end); - if(visited.containsKey(currChar)) { - start = Math.max(visited.get(currChar)+1, start); - } - if(output.length() < end - start + 1) { - output = input.substring(start, end+1); - } - visited.put(currChar, end); - } - return output; - } - - public static void main(String[] args) { - String input = "CODINGISAWESOME"; - System.out.println(getNonRepeatingCharacters(input)); - } - -} +package com.baeldung.algorithms.string; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class LongestSubstringNonRepeatingCharacters { + + public static String getUniqueCharacterSubstringBruteForce(String input) { + String output = ""; + for (int start = 0; start < input.length(); start++) { + Set visited = new HashSet<>(); + int end = start; + for (; end < input.length(); end++) { + char currChar = input.charAt(end); + if (visited.contains(currChar)) { + break; + } else { + visited.add(currChar); + } + } + if (output.length() < end - start + 1) { + output = input.substring(start, end); + } + } + return output; + } + + public static String getUniqueCharacterSubstring(String input) { + Map visited = new HashMap<>(); + String output = ""; + for (int start = 0, end = 0; end < input.length(); end++) { + char currChar = input.charAt(end); + if (visited.containsKey(currChar)) { + start = Math.max(visited.get(currChar) + 1, start); + } + if (output.length() < end - start + 1) { + output = input.substring(start, end + 1); + } + visited.put(currChar, end); + } + return output; + } + + public static void main(String[] args) { + String input = "CODINGISAWESOME"; + System.out.println(getUniqueCharacterSubstring(input)); + } + +} diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java index a3e67362ad..2d8e762dd1 100644 --- a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java +++ b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java @@ -1,20 +1,20 @@ -package com.baeldung.algorithms.string; - -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public class LongestSubstringNonRepeatingCharactersTest { - - @Test - void givenString_whenGetNonRepeatingCharactersBruteForceCalled_thenResultFoundAsExpected() { - String input = "CODINGISAWESOME"; - Assertions.assertEquals("NGISAWE", LongestSubstringNonRepeatingCharacters.getNonRepeatingCharactersBruteForce(input)); - } - - @Test - void givenString_whenGetNonRepeatingCharactersCalled_thenResultFoundAsExpected() { - String input = "CODINGISAWESOME"; - Assertions.assertEquals("NGISAWE",LongestSubstringNonRepeatingCharacters.getNonRepeatingCharacters(input)); - } - -} +package com.baeldung.algorithms.string; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class LongestSubstringNonRepeatingCharactersTest { + + @Test + void givenString_whenGetUniqueCharacterSubstringBruteForceCalled_thenResultFoundAsExpected() { + String input = "CODINGISAWESOME"; + Assertions.assertEquals("NGISAWE", LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstringBruteForce(input)); + } + + @Test + void givenString_whenGetUniqueCharacterSubstringCalled_thenResultFoundAsExpected() { + String input = "CODINGISAWESOME"; + Assertions.assertEquals("NGISAWE",LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstring(input)); + } + +} From ca681a8e67cfeba3770a737482dc71c594302394 Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Sun, 2 Dec 2018 10:44:27 +0530 Subject: [PATCH 4/7] Changes for Code review feedback: 1. Change main method to use command-line input. 2. Update test class to use static imports. 2. Add more use cases in test-cases. --- ...ongestSubstringNonRepeatingCharacters.java | 7 +++++-- ...stSubstringNonRepeatingCharactersTest.java | 21 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java index 51ae013cd6..cd1f3e94d5 100644 --- a/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java +++ b/algorithms-miscellaneous-1/src/main/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharacters.java @@ -44,8 +44,11 @@ public class LongestSubstringNonRepeatingCharacters { } public static void main(String[] args) { - String input = "CODINGISAWESOME"; - System.out.println(getUniqueCharacterSubstring(input)); + if(args.length > 0) { + System.out.println(getUniqueCharacterSubstring(args[0])); + } else { + System.err.println("This program expects command-line input. Please try again!"); + } } } diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java index 2d8e762dd1..2150be2532 100644 --- a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java +++ b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java @@ -1,20 +1,31 @@ package com.baeldung.algorithms.string; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstring; +import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstringBruteForce; + public class LongestSubstringNonRepeatingCharactersTest { @Test void givenString_whenGetUniqueCharacterSubstringBruteForceCalled_thenResultFoundAsExpected() { - String input = "CODINGISAWESOME"; - Assertions.assertEquals("NGISAWE", LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstringBruteForce(input)); + assertEquals("", getUniqueCharacterSubstringBruteForce("")); + assertEquals("A", getUniqueCharacterSubstringBruteForce("A")); + assertEquals("ABCDEF", getUniqueCharacterSubstringBruteForce("AABCDEF")); + assertEquals("ABCDEF", getUniqueCharacterSubstringBruteForce("ABCDEFF")); + assertEquals("NGISAWE", getUniqueCharacterSubstringBruteForce("CODINGISAWESOME")); + assertEquals("be coding", getUniqueCharacterSubstringBruteForce("always be coding")); } @Test void givenString_whenGetUniqueCharacterSubstringCalled_thenResultFoundAsExpected() { - String input = "CODINGISAWESOME"; - Assertions.assertEquals("NGISAWE",LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstring(input)); + assertEquals("", getUniqueCharacterSubstring("")); + assertEquals("A", getUniqueCharacterSubstring("A")); + assertEquals("ABCDEF", getUniqueCharacterSubstring("AABCDEF")); + assertEquals("ABCDEF", getUniqueCharacterSubstring("ABCDEFF")); + assertEquals("NGISAWE", getUniqueCharacterSubstring("CODINGISAWESOME")); + assertEquals("be coding", getUniqueCharacterSubstring("always be coding")); } } From 744283db802a4019bd4e8aaeb545aa25cc314fb3 Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Wed, 5 Dec 2018 10:07:06 +0530 Subject: [PATCH 5/7] Updated UnitTest name. --- .../string/LongestSubstringNonRepeatingCharactersTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java index 2150be2532..5c732ad134 100644 --- a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java +++ b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java @@ -9,7 +9,7 @@ import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharact public class LongestSubstringNonRepeatingCharactersTest { @Test - void givenString_whenGetUniqueCharacterSubstringBruteForceCalled_thenResultFoundAsExpected() { + void givenString_whenGetUniqueCharacterSubstringBruteForceCalled_thenResultFoundAsExpectedUnitTest() { assertEquals("", getUniqueCharacterSubstringBruteForce("")); assertEquals("A", getUniqueCharacterSubstringBruteForce("A")); assertEquals("ABCDEF", getUniqueCharacterSubstringBruteForce("AABCDEF")); @@ -19,7 +19,7 @@ public class LongestSubstringNonRepeatingCharactersTest { } @Test - void givenString_whenGetUniqueCharacterSubstringCalled_thenResultFoundAsExpected() { + void givenString_whenGetUniqueCharacterSubstringCalled_thenResultFoundAsExpectedUnitTest() { assertEquals("", getUniqueCharacterSubstring("")); assertEquals("A", getUniqueCharacterSubstring("A")); assertEquals("ABCDEF", getUniqueCharacterSubstring("AABCDEF")); From 9fa39257e4ca61f3d0405e15c7e8ccead6da3d20 Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Thu, 6 Dec 2018 08:38:51 +0530 Subject: [PATCH 6/7] PMD Fix: Update Test file name --- ...t.java => LongestSubstringNonRepeatingCharactersUnitTest.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/{LongestSubstringNonRepeatingCharactersTest.java => LongestSubstringNonRepeatingCharactersUnitTest.java} (100%) diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java similarity index 100% rename from algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersTest.java rename to algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java From 11f4a4aee053fa9139de9e28ddb92e092427d41d Mon Sep 17 00:00:00 2001 From: "akash.pandey" Date: Thu, 6 Dec 2018 08:43:21 +0530 Subject: [PATCH 7/7] PMD Fix : Renamed Unit Test --- .../string/LongestSubstringNonRepeatingCharactersUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java index 5c732ad134..9f1e6a2519 100644 --- a/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java +++ b/algorithms-miscellaneous-1/src/test/java/com/baeldung/algorithms/string/LongestSubstringNonRepeatingCharactersUnitTest.java @@ -6,7 +6,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstring; import static com.baeldung.algorithms.string.LongestSubstringNonRepeatingCharacters.getUniqueCharacterSubstringBruteForce; -public class LongestSubstringNonRepeatingCharactersTest { +public class LongestSubstringNonRepeatingCharactersUnitTest { @Test void givenString_whenGetUniqueCharacterSubstringBruteForceCalled_thenResultFoundAsExpectedUnitTest() {