diff --git a/src/main/java/io/zipcoder/ParenChecker.java b/src/main/java/io/zipcoder/ParenChecker.java index caee675..922572d 100644 --- a/src/main/java/io/zipcoder/ParenChecker.java +++ b/src/main/java/io/zipcoder/ParenChecker.java @@ -1,4 +1,48 @@ package io.zipcoder; +import java.util.Stack; + public class ParenChecker { + + private Stack charStack; + + ParenChecker(Stack charStack) { + this.charStack = charStack; + } + + public boolean logicChecker() { + return (logic('(', ')')) && + logic('{', '}') && + logic('[', ']') && + logic('<', '>') && + quoteCounter('\"') && + quoteCounter('\''); + } + + private boolean logic(char firstChar, char secondChar) { + int parenCount = 0; + for (Object aCharStack : charStack) { + if (parenCount < 0) { + return false; + } + if (aCharStack.equals(firstChar)) { + parenCount++; + } + if (aCharStack.equals(secondChar)) { + parenCount--; + } + } + return parenCount == 0; + } + + public boolean quoteCounter(char quote) { + int quoteCount = 0; + for (Object aCharStack : charStack) { + if (aCharStack.equals(quote)) { + quoteCount++; + } + } + return quoteCount % 2 == 0; + } + } diff --git a/src/main/java/io/zipcoder/WC.java b/src/main/java/io/zipcoder/WC.java index babb68c..a56a5d6 100644 --- a/src/main/java/io/zipcoder/WC.java +++ b/src/main/java/io/zipcoder/WC.java @@ -1,23 +1,52 @@ package io.zipcoder; +import java.io.File; import java.io.FileNotFoundException; -import java.io.FileReader; +import java.util.HashMap; import java.util.Iterator; import java.util.Scanner; public class WC { - private Iterator si; + + // private Iterator si; + private String entireFile;// = WC.class.getResource("someTextFile.txt").getFile(); + + // Nullary constructor for testing + public WC(){} public WC(String fileName) { try { - this.si = new Scanner(new FileReader(fileName)); + // NOTED OUT TEMPORARILY BECAUSE AM DINGUS + //this.si = new Scanner(new FileReader(fileName)); + this.entireFile = new Scanner(new File(WC.class.getResource("/someTextFile.txt").getFile())).useDelimiter("\\A").next(); } catch (FileNotFoundException e) { System.out.println(fileName + " Does Not Exist"); System.exit(-1); } } - public WC(Iterator si) { - this.si = si; +// public WC(Iterator si) { +// this.si = si; +// } + + public void logic() { + HashMap wordsAndAmounts = new HashMap(); + String[] arrayOfWords = entireFile.split("\\s+"); + for (String arrayOfWord : arrayOfWords) { + String currentWord = arrayOfWord; + currentWord = wordCleaner(currentWord); + int count = wordsAndAmounts.containsKey(currentWord) ? wordsAndAmounts.get(currentWord) : 0; + wordsAndAmounts.put(currentWord, count + 1); + } + // Print out all words next to how many times they appear + for (String name : wordsAndAmounts.keySet()){ + String value = wordsAndAmounts.get(name).toString(); + System.out.println(name + " " + value); + } + } + + private String wordCleaner(String word) { + return word.replaceAll("[^a-zA-Z ]", "").toLowerCase(); } + } diff --git a/src/main/resources/someTextFile.txt b/src/main/resources/someTextFile.txt index e69de29..e53251b 100644 --- a/src/main/resources/someTextFile.txt +++ b/src/main/resources/someTextFile.txt @@ -0,0 +1,4 @@ +Here is some text. +There will be words that are repeated. +This is one of them. +This lab was fun but now I do not know what to do. \ 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..fc03281 100644 --- a/src/test/java/io/zipcoder/ParenCheckerTest.java +++ b/src/test/java/io/zipcoder/ParenCheckerTest.java @@ -3,6 +3,140 @@ import org.junit.Assert; import org.junit.Test; +import java.util.ArrayList; +import java.util.Stack; + public class ParenCheckerTest { + @Test + public void parenthesisChecker1() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('('); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add(')'); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(parenChecker.logicChecker()); + } + + @Test + public void parenthesisChecker2() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('('); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add(')'); + charArrayList.add(')'); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(!(parenChecker.logicChecker())); + } + + @Test + public void parenthesisChecker3() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add(')'); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('('); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add(')'); + charArrayList.add(')'); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(!(parenChecker.logicChecker())); + } + + @Test + public void curlyBracketChecker() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('{'); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add('}'); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(parenChecker.logicChecker()); + } + + @Test + public void bracketChecker() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('['); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add(']'); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(parenChecker.logicChecker()); + } + + @Test + public void diamondChecker() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('['); + charArrayList.add('f'); + charArrayList.add('<'); + charArrayList.add(']'); + charArrayList.add('>'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(parenChecker.logicChecker()); + } + + @Test + public void doubleQuoteChecker() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('"'); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add('"'); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(parenChecker.logicChecker()); + } + + @Test + public void singleQuoteChecker() { + Stack stack = new Stack(); + ArrayList charArrayList = new ArrayList(); + charArrayList.add('1'); + charArrayList.add('d'); + charArrayList.add('\''); + charArrayList.add('f'); + charArrayList.add('('); + charArrayList.add('\''); + charArrayList.add(')'); + stack.addAll(charArrayList); + ParenChecker parenChecker = new ParenChecker(stack); + Assert.assertTrue(parenChecker.logicChecker()); + } + } \ 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..70b66cf 100644 --- a/src/test/java/io/zipcoder/WCTest.java +++ b/src/test/java/io/zipcoder/WCTest.java @@ -3,9 +3,44 @@ import org.junit.Assert; import org.junit.Test; -import java.util.ArrayList; -import java.util.Arrays; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; public class WCTest { + // Bask in glory + @Test + public void printWC() { + WC wc = new WC(WC.class.getResource("/someTextFile.txt").getFile()); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStream)); + wc.logic(); + Assert.assertEquals("here 1\n" + + "but 1\n" + + "some 1\n" + + "be 1\n" + + "do 2\n" + + "lab 1\n" + + "repeated 1\n" + + "that 1\n" + + "not 1\n" + + "are 1\n" + + "of 1\n" + + "now 1\n" + + "text 1\n" + + "will 1\n" + + "one 1\n" + + "words 1\n" + + "this 2\n" + + "was 1\n" + + "i 1\n" + + "is 2\n" + + "them 1\n" + + "what 1\n" + + "there 1\n" + + "know 1\n" + + "to 1\n" + + "fun 1\n", outputStream.toString()); + } + } \ No newline at end of file