Remove main and add tests for CountWords (#4210)

This commit is contained in:
Piotr Idzik 2023-06-02 18:28:33 +02:00 committed by GitHub
parent 22002c9939
commit ad03086f54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 59 additions and 26 deletions

View File

@ -3,32 +3,34 @@ package com.thealgorithms.others;
import java.util.Scanner;
/**
* You enter a string into this program, and it will return how many words were
* in that particular string
*
* @author Marcus
*/
public class CountWords {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter your text: ");
String str = input.nextLine();
System.out.println("Your text has " + wordCount(str) + " word(s)");
System.out.println(
"Your text has " + secondaryWordCount(str) + " word(s)"
);
input.close();
final public class CountWords {
private CountWords() {
}
private static int wordCount(String s) {
/**
* @brief counts the number of words in the input string
* @param s the input string
* @return the number of words in the input string
*/
public static int wordCount(String s) {
if (s == null || s.isEmpty()) {
return 0;
}
return s.trim().split("[\\s]+").length;
}
private static String removeSpecialCharacters(String s) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isLetterOrDigit(c) || Character.isWhitespace(c)) {
sb.append(c);
}
}
return sb.toString();
}
/**
* counts the number of words in a sentence but ignores all potential
* non-alphanumeric characters that do not represent a word. runs in O(n)
@ -37,17 +39,10 @@ public class CountWords {
* @param s String: sentence with word(s)
* @return int: number of words
*/
private static int secondaryWordCount(String s) {
if (s == null || s.isEmpty()) {
public static int secondaryWordCount(String s) {
if (s == null) {
return 0;
}
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (Character.isLetter(c) || Character.isDigit(c)) {
sb.append(c);
}
}
s = sb.toString();
return s.trim().split("[\\s]+").length;
return wordCount(removeSpecialCharacters(s));
}
}

View File

@ -0,0 +1,38 @@
package com.thealgorithms.others;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.HashMap;
import org.junit.jupiter.api.Test;
class CountWordsTest {
@Test
public void testWordCount() {
HashMap<String, Integer> testCases = new HashMap<>();
testCases.put("", 0);
testCases.put(null, 0);
testCases.put("aaaa bbb cccc", 3);
testCases.put("note extra spaces here", 4);
testCases.put(" a b c d e ", 5);
for (final var tc : testCases.entrySet()) {
assertEquals(CountWords.wordCount(tc.getKey()), tc.getValue());
}
}
@Test
public void testSecondaryWordCount() {
HashMap<String, Integer> testCases = new HashMap<>();
testCases.put("", 0);
testCases.put(null, 0);
testCases.put("aaaa bbb cccc", 3);
testCases.put("this-is-one-word!", 1);
testCases.put("What, about, this? Hmmm----strange", 4);
testCases.put("word1 word-2 word-3- w?o,r.d.@!@#$&*()<>4", 4);
for (final var tc : testCases.entrySet()) {
assertEquals(CountWords.secondaryWordCount(tc.getKey()), tc.getValue());
}
}
}