Skip to content
44 changes: 44 additions & 0 deletions src/main/java/io/zipcoder/ParenChecker.java
Original file line number Diff line number Diff line change
@@ -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;
}

}
39 changes: 34 additions & 5 deletions src/main/java/io/zipcoder/WC.java
Original file line number Diff line number Diff line change
@@ -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<String> si;

// private Iterator<String> 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<String> si) {
this.si = si;
// public WC(Iterator<String> si) {
// this.si = si;
// }

public void logic() {
HashMap<String, Integer> wordsAndAmounts = new HashMap<String, Integer>();
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();
}

}
4 changes: 4 additions & 0 deletions src/main/resources/someTextFile.txt
Original file line number Diff line number Diff line change
@@ -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.
134 changes: 134 additions & 0 deletions src/test/java/io/zipcoder/ParenCheckerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

}
39 changes: 37 additions & 2 deletions src/test/java/io/zipcoder/WCTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

}