diff --git a/core-java-modules/core-java-string-operations-12/src/main/java/com/baeldung/minusoperation/StringMinusOperations.java b/core-java-modules/core-java-string-operations-12/src/main/java/com/baeldung/minusoperation/StringMinusOperations.java new file mode 100644 index 000000000000..d8338b6ab5c1 --- /dev/null +++ b/core-java-modules/core-java-string-operations-12/src/main/java/com/baeldung/minusoperation/StringMinusOperations.java @@ -0,0 +1,38 @@ +package com.baeldung.minusoperation; + +import java.util.stream.Collectors; + +/** + * Container for all implementations of what could be considered a 'String-minus-operations' + */ +public class StringMinusOperations { + + public static String removeLastCharBySubstring(String sentence) { + return sentence.substring(0, sentence.length() - 1); + } + + public static String removeTrailingStringBySubstring(String sentence, String lastSequence) { + var trailing = sentence.substring(sentence.length() - lastSequence.length()); + if(trailing.equals(lastSequence)) { + return sentence.substring(0, sentence.length() - lastSequence.length()); + } else { + return sentence; + } + } + + public static String minusByReplace(String sentence, char removeMe) { + return sentence.replace(String.valueOf(removeMe), ""); + } + + public static String minusByReplace(String sentence, String removeMe) { + return sentence.replace(removeMe, ""); + } + + public static String minusByStream(String sentence, char removeMe) { + return sentence.chars() + .mapToObj(c -> (char) c) + .filter(it -> !it.equals(removeMe)) + .map(String::valueOf) + .collect(Collectors.joining()); + } +} diff --git a/core-java-modules/core-java-string-operations-12/src/test/java/com/baeldung/minusoperation/StringMinusOperationsUnitTest.java b/core-java-modules/core-java-string-operations-12/src/test/java/com/baeldung/minusoperation/StringMinusOperationsUnitTest.java new file mode 100644 index 000000000000..c8a497b883b8 --- /dev/null +++ b/core-java-modules/core-java-string-operations-12/src/test/java/com/baeldung/minusoperation/StringMinusOperationsUnitTest.java @@ -0,0 +1,70 @@ +package com.baeldung.minusoperation; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class StringMinusOperationsUnitTest { + + @Test + public void givenNotBlankString_whenRemovingLastChar_thenReturnOriginalWithoutLastChar() { + var original = "Don't give up!"; + + var result = StringMinusOperations.removeLastCharBySubstring(original); + + assertThat(result).doesNotContain("!") + .isEqualTo("Don't give up"); // no '!' at the end + } + + @Test + public void givenNotBlankString_whenRemovingLastString_thenReturnOriginalWithoutLastString() { + var original = "Don't give up!"; + + var result = StringMinusOperations.removeTrailingStringBySubstring(original, "up!"); + + assertThat(result).doesNotContain("up!") + .isEqualTo("Don't give "); // no 'up!' at the end + } + + @Test + public void givenNotBlankString_whenRemovingLastStringThatDoesNotMatch_thenReturnOriginalString() { + var original = "Don't give up!"; + + var result = StringMinusOperations.removeTrailingStringBySubstring(original, "foo"); + + assertThat(result).isEqualTo(original); + } + + @Test + public void givenNotBlankString_whenRemovingSpecificChar_thenReturnOriginalWithoutThatChar() { + var original = "Don't give up!"; + var toRemove = 't'; + + var result = StringMinusOperations.minusByReplace(original, toRemove); + + assertThat(result).doesNotContain(String.valueOf(toRemove)) + .isEqualTo("Don' give up!"); // no 't' + } + + @Test + public void givenNotBlankString_whenRemovingSpecificString_thenReturnOriginalWithoutThatString() { + var original = "Don't give up!"; + var toRemove = "Don't"; + + var result = StringMinusOperations.minusByReplace(original, toRemove); + + assertThat(result).doesNotContain(toRemove) + .isEqualTo(" give up!"); // no 'Don't' + } + + @Test + public void givenNotBlankString_whenRemovingSpecificStringByStream_thenReturnOriginalWithoutThatString() { + var original = "Don't give up!"; + var toRemove = ' '; + + var result = StringMinusOperations.minusByStream(original, toRemove); + + assertThat(result).doesNotContain(String.valueOf(toRemove)) + .isEqualTo("Don'tgiveup!"); // no blanks + } +}