From 6bbef27bc74d343ec0f9cba60f72a5707fc3071a Mon Sep 17 00:00:00 2001 From: "Kai.Yuan" Date: Wed, 31 Jan 2024 23:27:16 +0100 Subject: [PATCH] [count-upper-lower] count upper/lowercase letters --- .../core-java-string-operations-8/README.md | 4 +- .../core-java-string-operations-8/pom.xml | 106 ++++++------------ .../CountUpperAndLowercaseCharsUnitTest.java | 85 ++++++++++++++ 3 files changed, 121 insertions(+), 74 deletions(-) create mode 100644 core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/countupperandlowercasechars/CountUpperAndLowercaseCharsUnitTest.java diff --git a/core-java-modules/core-java-string-operations-8/README.md b/core-java-modules/core-java-string-operations-8/README.md index 2dce44d217..6598a4b9cc 100644 --- a/core-java-modules/core-java-string-operations-8/README.md +++ b/core-java-modules/core-java-string-operations-8/README.md @@ -1,2 +1,2 @@ - -### Relevant Articles: +### Relevant Articles: +>>>>>>> be317465c ([count-upper-lower] count upper/lowercase letters) diff --git a/core-java-modules/core-java-string-operations-8/pom.xml b/core-java-modules/core-java-string-operations-8/pom.xml index 2495abccf8..a2f97a93d9 100644 --- a/core-java-modules/core-java-string-operations-8/pom.xml +++ b/core-java-modules/core-java-string-operations-8/pom.xml @@ -1,72 +1,34 @@ - - - 4.0.0 - core-java-string-operations-8 - core-java-string-operations-8 - jar - - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT - - - - - org.apache.commons - commons-lang3 - ${apache.commons.lang3.version} - - - org.apache.commons - commons-text - ${commons-text.version} - - - org.liquibase - liquibase-core - 4.9.1 - test - - - org.junit.jupiter - junit-jupiter - 5.8.1 - test - - - org.liquibase - liquibase-core - 4.9.1 - test - - - junit - junit - 4.13.2 - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - ${maven.compiler.source} - ${maven.compiler.target} - - - - - - - 11 - 11 - 3.13.0 - 1.10.0 - - - \ No newline at end of file + + + 4.0.0 + core-java-string-operations-8 + core-java-string-operations-8 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + + + 11 + 11 + + + diff --git a/core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/countupperandlowercasechars/CountUpperAndLowercaseCharsUnitTest.java b/core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/countupperandlowercasechars/CountUpperAndLowercaseCharsUnitTest.java new file mode 100644 index 0000000000..cfef8d53ad --- /dev/null +++ b/core-java-modules/core-java-string-operations-8/src/test/java/com/baeldung/countupperandlowercasechars/CountUpperAndLowercaseCharsUnitTest.java @@ -0,0 +1,85 @@ +package com.baeldung.countupperandlowercasechars; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CountUpperAndLowercaseCharsUnitTest { + private static final String MY_STRING = "Hi, Welcome to Baeldung! Let's count letters!"; + private static final LetterCount EXPECTED = new LetterCount(4, 31); + + @Test + void whenIteratingCharArrayCompareAndCount_thenGetExpectedResult() { + int upperCnt = 0; + int lowerCnt = 0; + for (char c : MY_STRING.toCharArray()) { + if (c >= 'A' && c <= 'Z') { + upperCnt++; + } + if (c >= 'a' && c <= 'z') { + lowerCnt++; + } + } + LetterCount result = new LetterCount(upperCnt, lowerCnt); + assertEquals(EXPECTED, result); + } + + @Test + void whenUsingCharacterIsLowerOrUpperCase_thenGetExpectedResult() { + int upperCnt = 0; + int lowerCnt = 0; + for (char c : MY_STRING.toCharArray()) { + if (Character.isUpperCase(c)) { + upperCnt++; + } + if (Character.isLowerCase(c)) { + lowerCnt++; + } + } + LetterCount result = new LetterCount(upperCnt, lowerCnt); + assertEquals(EXPECTED, result); + } + + @Test + void whenUsingStreamFilterAndCount_thenGetExpectedResult() { + LetterCount result = new LetterCount( + (int) MY_STRING.chars().filter(Character::isUpperCase).count(), + (int) MY_STRING.chars().filter(Character::isLowerCase).count() + ); + assertEquals(EXPECTED, result); + } +} + +class LetterCount { + private int uppercaseCnt; + private int lowercaseCnt; + + public LetterCount(int uppercaseCnt, int lowercaseCnt) { + this.uppercaseCnt = uppercaseCnt; + this.lowercaseCnt = lowercaseCnt; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof LetterCount)) { + return false; + } + + LetterCount that = (LetterCount) o; + + if (uppercaseCnt != that.uppercaseCnt) { + return false; + } + return lowercaseCnt == that.lowercaseCnt; + } + + @Override + public int hashCode() { + int result = uppercaseCnt; + result = 31 * result + lowercaseCnt; + return result; + } +} \ No newline at end of file