diff --git a/java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java b/java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java index 11c2fc7ae5..70a4042dc8 100644 --- a/java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java +++ b/java-strings-3/src/main/java/com/baeldung/string/wordcount/WordCounter.java @@ -10,7 +10,7 @@ public class WordCounter { if (arg == null) { return 0; } - final String[] words = arg.split("[\\pP\\s]+"); + final String[] words = arg.split("[\\pP\\s&&[^']]+"); return words.length; } @@ -32,7 +32,7 @@ public class WordCounter { int characterCounter = 0; while (characterCounter < stringLength) { - if (Character.isLetter(arg.charAt(characterCounter)) && flag == SEPARATOR) { + if ((Character.isLetter(arg.charAt(characterCounter)) || isAllowedWordPunct(arg.charAt(characterCounter))) && flag == SEPARATOR) { flag = WORD; count++; } else if (!Character.isLetter(arg.charAt(characterCounter))) { @@ -42,4 +42,8 @@ public class WordCounter { } return count; } + + private static boolean isAllowedWordPunct(char charAt) { + return charAt == '\''; + } } diff --git a/java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java b/java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java index 19e13572b7..357254f84c 100644 --- a/java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java +++ b/java-strings-3/src/test/java/com/baeldung/string/wordcount/WordCountUnitTest.java @@ -3,6 +3,9 @@ package com.baeldung.string.wordcount; import static org.junit.Assert.assertEquals; import org.junit.Test; + +import java.util.StringTokenizer; + public class WordCountUnitTest { private String string1 = "This is a test sentence with eight words"; private String string2 = "This#is%a test sentence with eight words"; @@ -10,11 +13,15 @@ public class WordCountUnitTest { @Test public void givenStringWith8Words_whenUsingRegexCount_ThenResultEqual8() { assertEquals(8, WordCounter.countWordsUsingRegex(string2)); + assertEquals(9, WordCounter.countWordsUsingRegex("no&one#should%ever-write-like,this;but:well")); + assertEquals(7, WordCounter.countWordsUsingRegex("the farmer's wife--she was from Albuquerque")); } @Test public void givenStringWith8Words_whenUsingManualMethod_ThenWordCountEqual8() { assertEquals(8, WordCounter.countWordsManually(string1)); + assertEquals(9, WordCounter.countWordsManually("no&one#should%ever-write-like,this but well")); + assertEquals(7, WordCounter.countWordsManually("the farmer's wife--she was from Albuquerque")); } @Test