Remove main and add tests for CountWords (#4210)
This commit is contained in:
parent
22002c9939
commit
ad03086f54
@ -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));
|
||||
}
|
||||
}
|
||||
|
38
src/test/java/com/thealgorithms/others/CountWordsTest.java
Normal file
38
src/test/java/com/thealgorithms/others/CountWordsTest.java
Normal 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());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user