diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..9a874b5
Binary files /dev/null and b/.DS_Store differ
diff --git a/pom.xml b/pom.xml
index e66b725..efb68c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,18 @@
io.zipcoder
collections
1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+
+
+
+
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..7b0d367
Binary files /dev/null and b/src/.DS_Store differ
diff --git a/src/main/.DS_Store b/src/main/.DS_Store
new file mode 100644
index 0000000..53fb051
Binary files /dev/null and b/src/main/.DS_Store differ
diff --git a/src/main/java/io/zipcoder/ParenChecker.java b/src/main/java/io/zipcoder/ParenChecker.java
index caee675..aef92bc 100644
--- a/src/main/java/io/zipcoder/ParenChecker.java
+++ b/src/main/java/io/zipcoder/ParenChecker.java
@@ -1,4 +1,55 @@
package io.zipcoder;
+import java.util.*;
+
public class ParenChecker {
+
+ /**
+ * Create a class with a method that verifies all parens () are paired.
+ * HINT: Use a stack.
+ **/
+ public boolean isPaired(String input) {
+ return hasPair(input, '(', ')');
+ }
+
+
+ /**
+ * Create a method that checks that all opening characters have a closing one.
+ * Characters include () {} [] <> "" ''
+ **/
+ public boolean hasClosing(String input) {
+ return(hasPair(input, '(', ')')
+ && hasPair(input, '{', '}')
+ && hasPair(input, '[', ']')
+ && hasPair(input, '<', '>')
+ && hasPair(input, '\"', '\"')
+ && hasPair(input, '\'', '\''));
+ }
+
+
+ public boolean hasPair(String input, Character openingChar, Character closingChar) {
+ Stack stack = new Stack();
+
+ for(int i = 0; i < input.length(); i++) {
+ char currentChar = input.charAt(i);
+
+ // if currentChar is opening, add to stack
+ if (currentChar == openingChar) {
+ stack.push(currentChar);
+ continue;
+ }
+ // if currentChar is closing but there's no opening in stack, return false
+ if (currentChar == closingChar) {
+ if(stack.isEmpty()) {
+ return false;
+ } else if(stack.peek() == openingChar) {
+ stack.pop();
+ } else {
+ return false;
+ }
+ }
+ }
+ // if stack is empty then all parentheses were paired
+ return stack.empty() || (stack.size() % 2 == 0);
+ }
}
diff --git a/src/main/java/io/zipcoder/WC.java b/src/main/java/io/zipcoder/WC.java
index babb68c..311bf24 100644
--- a/src/main/java/io/zipcoder/WC.java
+++ b/src/main/java/io/zipcoder/WC.java
@@ -1,9 +1,7 @@
package io.zipcoder;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.util.Iterator;
-import java.util.Scanner;
+import java.io.*;
+import java.util.*;
public class WC {
private Iterator si;
@@ -20,4 +18,45 @@ public WC(String fileName) {
public WC(Iterator si) {
this.si = si;
}
+
+
+ public Map getWordCount() {
+ Map wordOccurences = new HashMap<>();
+ while (si.hasNext()) {
+ String currentLine = si.next();
+ String[] words = currentLine.split(" ");
+
+ for (String word : words) {
+ word = word.toLowerCase();
+ word = word.replaceAll("[^a-zA-Z']", "");
+
+ if (!word.trim().isEmpty()) {
+ if (wordOccurences.containsKey(word)) {
+ int count = wordOccurences.get(word);
+ wordOccurences.put(word, count + 1);
+ } else {
+ wordOccurences.put(word, 1);
+ }
+ }
+ }
+ }
+ return entriesSortedByValues(wordOccurences);
+ }
+
+
+ private static > Map entriesSortedByValues(Map map) {
+ // ArrayList is initialized with all entries of passed in map
+ List> sortedEntries = new ArrayList<>(map.entrySet());
+
+ // used lambda expression to sort values in descending order and return result
+ sortedEntries.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));
+
+ Map result = new LinkedHashMap<>();
+
+ for (Map.Entry entry : sortedEntries) {
+ result.put(entry.getKey(), entry.getValue());
+ }
+ return result;
+ }
}
+
diff --git a/src/main/resources/someTextFile.txt b/src/main/resources/someTextFile.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/main/resources/test b/src/main/resources/test
new file mode 100644
index 0000000..bfb2bf4
--- /dev/null
+++ b/src/main/resources/test
@@ -0,0 +1,3 @@
+The quick brown fox jumped over the lazy dog.
+The the the the.
+the The. Quick Brown.
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/ParenCheckerTest.java b/src/test/java/io/zipcoder/ParenCheckerTest.java
index 76aa3b6..c8f1839 100644
--- a/src/test/java/io/zipcoder/ParenCheckerTest.java
+++ b/src/test/java/io/zipcoder/ParenCheckerTest.java
@@ -5,4 +5,61 @@
public class ParenCheckerTest {
+ @Test
+ public void isPairedTest1() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = "()()()()";
+
+ Assert.assertTrue(parenChecker.isPaired(str));
+ }
+
+ @Test
+ public void isPairedTest2() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = ")()()()()((";
+
+ Assert.assertFalse(parenChecker.isPaired(str));
+ }
+
+ @Test
+ public void isPairedTest3() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = ")((()";
+
+ Assert.assertFalse(parenChecker.isPaired(str));
+ }
+
+ @Test
+ public void hasClosingTest1() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = "<<>>(){}[]";
+
+ Assert.assertTrue(parenChecker.hasClosing(str));
+ }
+
+ @Test
+ public void hasClosingClosingTest2() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = "\"\"";
+
+ Assert.assertTrue(parenChecker.hasClosing(str));
+ }
+
+ @Test
+ public void hasClosingClosingTest3() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = "\'\'\'";
+
+ Assert.assertFalse(parenChecker.hasClosing(str));
+ }
+
+ @Test
+ public void hasPairTest1() {
+ ParenChecker parenChecker = new ParenChecker();
+ String str = "()()()()";
+
+ Assert.assertTrue(parenChecker.hasPair(str, '(', ')'));
+ }
+
+
}
\ No newline at end of file
diff --git a/src/test/java/io/zipcoder/WCTest.java b/src/test/java/io/zipcoder/WCTest.java
index 895e831..8bc77cd 100644
--- a/src/test/java/io/zipcoder/WCTest.java
+++ b/src/test/java/io/zipcoder/WCTest.java
@@ -3,9 +3,48 @@
import org.junit.Assert;
import org.junit.Test;
-import java.util.ArrayList;
-import java.util.Arrays;
+import javax.xml.bind.Element;
+import java.util.*;
public class WCTest {
+ @Test
+ public void wcTest() {
+ WC wc = new WC("/Users/madelinebowe/Dev/CR-MesoLabs-Collections-EncapsulativeCharacters/src/main/resources/test");
+
+ String expected = "{the=8, quick=2, brown=2, over=1, lazy=1, jumped=1, dog=1, fox=1}";
+ String actual = wc.getWordCount().toString();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void wcTest2() {
+ WC wc = new WC("/Users/madelinebowe/Dev/CR-MesoLabs-Collections-EncapsulativeCharacters/src/main/resources/test");
+ Map test = wc.getWordCount();
+
+ Integer expected = 8;
+ Integer actual = test.get("the");
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void wcTest3() {
+ WC wc = new WC("/Users/madelinebowe/Dev/CR-MesoLabs-Collections-EncapsulativeCharacters/src/main/resources/test");
+ Map test = wc.getWordCount();
+
+ Integer expected = 2;
+ Integer actual = test.get("quick");
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void wcTest4() {
+ WC wc = new WC("/Users/madelinebowe/Dev/CR-MesoLabs-Collections-EncapsulativeCharacters/src/main/resources/test");
+ Map test = wc.getWordCount();
+
+ Assert.assertFalse(test.containsKey("The"));
+ }
}
\ No newline at end of file