From 6e913cd3a2049ae2f348ee72d9503bdf53970668 Mon Sep 17 00:00:00 2001 From: Emma Beech Date: Mon, 23 Mar 2020 14:58:08 -0400 Subject: [PATCH 1/2] done --- Hurtlocker.iml | 18 --- pom.xml | 12 ++ src/main/java/JerkSONParser.java | 197 +++++++++++++++++++++++++++ src/main/java/Main.java | 2 + src/main/java/ParserUtils.java | 3 + src/main/java/Writer.java | 24 ++++ src/main/resources/output.txt | 19 +++ src/test/java/TestJerkSONParser.java | 54 ++++++++ target/classes/Main.class | Bin 1162 -> 1269 bytes 9 files changed, 311 insertions(+), 18 deletions(-) delete mode 100644 Hurtlocker.iml create mode 100644 src/main/java/JerkSONParser.java create mode 100644 src/main/java/ParserUtils.java create mode 100644 src/main/java/Writer.java create mode 100644 src/main/resources/output.txt create mode 100644 src/test/java/TestJerkSONParser.java diff --git a/Hurtlocker.iml b/Hurtlocker.iml deleted file mode 100644 index 22967e8..0000000 --- a/Hurtlocker.iml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 39639cd..3c31de2 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ io.zipcoder HurtLocker 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + diff --git a/src/main/java/JerkSONParser.java b/src/main/java/JerkSONParser.java new file mode 100644 index 0000000..5941af7 --- /dev/null +++ b/src/main/java/JerkSONParser.java @@ -0,0 +1,197 @@ +import java.io.*; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +//count exceptions +//all letters to lower +//## for new object +//map of objects + +//try to add to parser utils if time +public class JerkSONParser { + private String data; + private int exceptionCount; + private List pairedValues; + private List linesToPrint; + private Set uniqueValues; + private Writer console; + + + public JerkSONParser(String rawData){ + this.data = rawData; + pairedValues = new ArrayList<>(); + linesToPrint = new ArrayList<>(); + uniqueValues = new HashSet<>(); + console = new Writer(); + } + + public void processFile(){ + getAndSetLines(); + countItems(); + createPrintLine(exceptionCount, "errors\t\t"); + try { + console.writeToFile(linesToPrint); + } catch (IOException e){ + e.printStackTrace(); + } + } + + + public void getAndSetLines(){ + Scanner sc = new Scanner(data); + sc.useDelimiter("##"); + + while(sc.hasNext()){ + String line = sc.next(); + getErrors(line); + storeValues(line); + } + } + + public void storeValues(String toParse){ + String name = ""; + String price = ""; + + name = matchedString(toParse, "(?i)name:(.*?);"); + price = matchedString(toParse, "(?i)price:(.*?);"); + + if(price.equals("") || name.equals("")){ + } + else{ + name = name.toLowerCase(); + pairedValues.add(name + "-" + price + "-"); + uniqueValues.add(name); + price = ""; + name = ""; + } + } + + + + public void getPriceCounter(String item){ + String price = ""; + String previousPrice = ""; + int priceCounter = 0; + + for(String s : pairedValues){ + if(s.matches("(.*)(?i)" + item + "(.*)")) { + if (priceCounter == 0) { + previousPrice = matchedString(s, "-(.*?)-"); + } + price = matchedString(s, "-(.*?)-"); + + + if (price.equals(previousPrice)) { + priceCounter++; + } else { + createPrintLine(priceCounter, "price:" + printPadding(previousPrice, 9)); + previousPrice = price; + priceCounter = 1; + } + } + else if(priceCounter != 0){ + createPrintLine(priceCounter, "price:" + printPadding(price, 9)); + price = ""; + priceCounter = 0; + } + } + if(priceCounter != 0) { + createPrintLine(priceCounter, "price:\t" + price); + } + printDividers("new"); + + } + + public void countItems(){ + Collections.sort(pairedValues); + + int counter = 0; + for(String element : uniqueValues){ + for(String s : pairedValues){ + if(s.matches("(.*)(?i)" + element + "(.*)") && s.matches("(.*)(?i)[0-9](.*)")){ + counter++; + } + } + createPrintLine(counter, "name:" + printPadding(element,10).toLowerCase()); + counter = 0; + getPriceCounter(element.toLowerCase()); + } + } + + public void getErrors(String lineIn){ + String pattern = "[;!%@^*]"; + Scanner sc = new Scanner(lineIn); + sc.useDelimiter(pattern); + + while (sc.hasNext()){ + String line = sc.next(); + if(!findPattern(lineIn, ":")){ + exceptionCount++; + } + else{ + findMissingVals(line); + } + } + } + + public void findMissingVals(String input){ + int count = 0; + Scanner sc = new Scanner(input); + sc.useDelimiter(":"); + + while (sc.hasNext()){ + String line = sc.next(); + count++; + } + if(count != 2){ + exceptionCount++; + } + } + + public String matchedString(String textToSearch, String pattern){ + Pattern pattern1 = Pattern.compile(pattern); + Matcher matcher = pattern1.matcher(textToSearch); + if(matcher.find()){ + return matcher.group(1); + } + return ""; + } + + public Boolean findPattern(String textToSearch, String pattern){ + Pattern pattern1 = Pattern.compile(pattern); + return pattern1.matcher(textToSearch).find(); + } + + + + public String printPadding(String s, int n){ + return String.format("%" + n + "s", s); + } + + public void createPrintLine(Integer counter, String item){ + linesToPrint.add(item + "\t\tseen: " + counter + " times\n"); + printDividers(item); + } + + public void printDividers(String item){ + if(findPattern(item, "name")){ + String line = "=================\t\t================="; + linesToPrint.add(line); + } + else if(findPattern(item, "errors")){ + } + else if(findPattern(item, "new")){ + linesToPrint.add("\n"); + } + else{ + String line = "-------------------\t\t-------------------"; + linesToPrint.add(line); + } + } + + + + + +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 632942a..66f9ca5 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -13,5 +13,7 @@ public static void main(String[] args) throws Exception{ String output = (new Main()).readRawDataToString(); System.out.println(output); + JerkSONParser jp = new JerkSONParser(output); + jp.processFile(); } } diff --git a/src/main/java/ParserUtils.java b/src/main/java/ParserUtils.java new file mode 100644 index 0000000..c1892a5 --- /dev/null +++ b/src/main/java/ParserUtils.java @@ -0,0 +1,3 @@ +public class ParserUtils { + +} diff --git a/src/main/java/Writer.java b/src/main/java/Writer.java new file mode 100644 index 0000000..c12c97d --- /dev/null +++ b/src/main/java/Writer.java @@ -0,0 +1,24 @@ +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; + +public class Writer { + private String fileName; + private String lineToWrite = ""; + FileWriter writer; + + public Writer(){ + this.fileName = "src/main/resources/output.txt"; + } + + public void writeToFile(List printAll) throws IOException { + for(String s : printAll){ + lineToWrite = lineToWrite.concat(s); + } + writer = new FileWriter(this.fileName); + PrintWriter printLine = new PrintWriter(writer); + printLine.printf("%s" + "%n", lineToWrite); + printLine.close(); + } +} diff --git a/src/main/resources/output.txt b/src/main/resources/output.txt new file mode 100644 index 0000000..0ea6d19 --- /dev/null +++ b/src/main/resources/output.txt @@ -0,0 +1,19 @@ +name: bread seen: 6 times +================= =================price: 1.23 seen: 6 times +------------------- ------------------- +name: milk seen: 6 times +================= =================price: 1.23 seen: 1 times +------------------- -------------------price: 3.23 seen: 5 times +------------------- ------------------- +name: co0kies seen: 1 times +================= =================price: 2.25 seen: 1 times +------------------- ------------------- +name: apples seen: 4 times +================= =================price: 0.23 seen: 2 times +------------------- -------------------price: 0.25 seen: 2 times +------------------- ------------------- +name: cookies seen: 7 times +================= =================price: 2.25 seen: 7 times +------------------- ------------------- +errors seen: 4 times + diff --git a/src/test/java/TestJerkSONParser.java b/src/test/java/TestJerkSONParser.java new file mode 100644 index 0000000..480eb6d --- /dev/null +++ b/src/test/java/TestJerkSONParser.java @@ -0,0 +1,54 @@ +import com.sun.javafx.tools.packager.PackagerException; +import jdk.nashorn.internal.runtime.ParserException; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.*; +import java.util.StringTokenizer; + +public class TestJerkSONParser { + JerkSONParser jp; + String testData; + + + @Before + public void init() throws FileNotFoundException { + testData = "naMe:Milk;price:3.23;type:Food;expiration:1/25/2016##naME:BreaD;price:1.23;type:Food;expiration:1/02/2016##NAMe:BrEAD;price:1.23;type:Food;expiration:2/25/2016##"; + jp = new JerkSONParser(testData); + } + + @Test + public void findPattern1(){ + String pattern = "##"; + Boolean actual = jp.findPattern(testData,pattern); + Assert.assertTrue(actual); + } + + @Test + public void findPattern2(){ + String pattern = "qg"; + Boolean actual = jp.findPattern(testData,pattern); + Assert.assertFalse(actual); + } + + + @Test + public void matchedString(){ + String pattern = ":(.*?);"; + String test = "type:Food;"; + + String expected = "Food"; + String actual = jp.matchedString(test, pattern); + + Assert.assertEquals(expected,actual); + } + + +} + + + + + + diff --git a/target/classes/Main.class b/target/classes/Main.class index c9d3858bc278f548c9eaabc471ed4e0ba034dcf0..2ed51f25802057c8d25564395935df62053e7e16 100644 GIT binary patch delta 561 zcmY+AOHWf#6otQ2T2JroDTOQG1C@&6gJSW4PgGC=v9@T$3Bwz52cQ9RTOTv#&I~`n zUw|fUViSLW6Mv0U<2r?b<|gaxz3*DwSaxKLA-9H?z58DAj98`eyaT%F8%y zCh4ppT-|<`t|vYNSEl(ZGJhRjs=VwPg68YrT2h(O~df*L*RttasAw^`zPKF*vK0 zN_qk4!}uJ+NZqtfqcb1$C($O(%S6eQASquOmum5+W9qpa=6)fE)yoGv%wt9o^>SU<08mJKVcYSs+v zY$zf%@8r~wrbDx7sIaBkHtbNn|4=u|Wl#c*><3{KVlUX%cnQ1tgmA6WL4wst;L^XEsCc+^iZ&_AE;54MqKOF8BZ^-7d`Dpp zrG})Yp3uh+M4MO#ci4p{&aKcP{sLn-l;h%<2ol{N9sLZ*pd-6vB}e_sQSxWsV(1(G CBPd1y From 857b3592a2a6027bb48165e081be98b770a03f24 Mon Sep 17 00:00:00 2001 From: Emma Beech Date: Mon, 23 Mar 2020 15:23:46 -0400 Subject: [PATCH 2/2] a bit of refactoring i didnt have time for --- src/main/java/JerkSONParser.java | 69 ++++++++-------------------- src/main/java/ParserUtils.java | 19 ++++++++ src/test/java/TestJerkSONParser.java | 6 +-- 3 files changed, 40 insertions(+), 54 deletions(-) diff --git a/src/main/java/JerkSONParser.java b/src/main/java/JerkSONParser.java index 5941af7..4145e48 100644 --- a/src/main/java/JerkSONParser.java +++ b/src/main/java/JerkSONParser.java @@ -1,29 +1,21 @@ import java.io.*; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -//count exceptions -//all letters to lower -//## for new object -//map of objects - -//try to add to parser utils if time public class JerkSONParser { private String data; private int exceptionCount; private List pairedValues; private List linesToPrint; private Set uniqueValues; - private Writer console; + private Writer writer; - public JerkSONParser(String rawData){ - this.data = rawData; + public JerkSONParser(String data){ + this.data = data; pairedValues = new ArrayList<>(); linesToPrint = new ArrayList<>(); uniqueValues = new HashSet<>(); - console = new Writer(); + writer = new Writer(); } public void processFile(){ @@ -31,7 +23,7 @@ public void processFile(){ countItems(); createPrintLine(exceptionCount, "errors\t\t"); try { - console.writeToFile(linesToPrint); + writer.writeToFile(linesToPrint); } catch (IOException e){ e.printStackTrace(); } @@ -50,11 +42,11 @@ public void getAndSetLines(){ } public void storeValues(String toParse){ - String name = ""; - String price = ""; + String name; + String price; - name = matchedString(toParse, "(?i)name:(.*?);"); - price = matchedString(toParse, "(?i)price:(.*?);"); + name = ParserUtils.matchedString(toParse, "(?i)name:(.*?);"); + price = ParserUtils.matchedString(toParse, "(?i)price:(.*?);"); if(price.equals("") || name.equals("")){ } @@ -62,8 +54,6 @@ public void storeValues(String toParse){ name = name.toLowerCase(); pairedValues.add(name + "-" + price + "-"); uniqueValues.add(name); - price = ""; - name = ""; } } @@ -77,21 +67,21 @@ public void getPriceCounter(String item){ for(String s : pairedValues){ if(s.matches("(.*)(?i)" + item + "(.*)")) { if (priceCounter == 0) { - previousPrice = matchedString(s, "-(.*?)-"); + previousPrice = ParserUtils.matchedString(s, "-(.*?)-"); } - price = matchedString(s, "-(.*?)-"); + price = ParserUtils.matchedString(s, "-(.*?)-"); if (price.equals(previousPrice)) { priceCounter++; } else { - createPrintLine(priceCounter, "price:" + printPadding(previousPrice, 9)); + createPrintLine(priceCounter, "price:" + ParserUtils.printPadding(previousPrice, 9)); previousPrice = price; priceCounter = 1; } } else if(priceCounter != 0){ - createPrintLine(priceCounter, "price:" + printPadding(price, 9)); + createPrintLine(priceCounter, "price:" + ParserUtils.printPadding(price, 9)); price = ""; priceCounter = 0; } @@ -113,7 +103,7 @@ public void countItems(){ counter++; } } - createPrintLine(counter, "name:" + printPadding(element,10).toLowerCase()); + createPrintLine(counter, "name:" + ParserUtils.printPadding(element,10).toLowerCase()); counter = 0; getPriceCounter(element.toLowerCase()); } @@ -126,7 +116,7 @@ public void getErrors(String lineIn){ while (sc.hasNext()){ String line = sc.next(); - if(!findPattern(lineIn, ":")){ + if(!ParserUtils.findPattern(lineIn, ":")){ exceptionCount++; } else{ @@ -149,39 +139,21 @@ public void findMissingVals(String input){ } } - public String matchedString(String textToSearch, String pattern){ - Pattern pattern1 = Pattern.compile(pattern); - Matcher matcher = pattern1.matcher(textToSearch); - if(matcher.find()){ - return matcher.group(1); - } - return ""; - } - - public Boolean findPattern(String textToSearch, String pattern){ - Pattern pattern1 = Pattern.compile(pattern); - return pattern1.matcher(textToSearch).find(); - } - - public String printPadding(String s, int n){ - return String.format("%" + n + "s", s); - } - public void createPrintLine(Integer counter, String item){ linesToPrint.add(item + "\t\tseen: " + counter + " times\n"); printDividers(item); } public void printDividers(String item){ - if(findPattern(item, "name")){ + if(ParserUtils.findPattern(item, "name")){ String line = "=================\t\t================="; linesToPrint.add(line); } - else if(findPattern(item, "errors")){ + else if(ParserUtils.findPattern(item, "errors")){ } - else if(findPattern(item, "new")){ + else if(ParserUtils.findPattern(item, "new")){ linesToPrint.add("\n"); } else{ @@ -189,9 +161,4 @@ else if(findPattern(item, "new")){ linesToPrint.add(line); } } - - - - - } diff --git a/src/main/java/ParserUtils.java b/src/main/java/ParserUtils.java index c1892a5..387a433 100644 --- a/src/main/java/ParserUtils.java +++ b/src/main/java/ParserUtils.java @@ -1,3 +1,22 @@ +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class ParserUtils { + public static String matchedString(String textToSearch, String pattern){ + Pattern pattern1 = Pattern.compile(pattern); + Matcher matcher = pattern1.matcher(textToSearch); + if(matcher.find()){ + return matcher.group(1); + } + return ""; + } + + public static Boolean findPattern(String textToSearch, String pattern){ + Pattern pattern1 = Pattern.compile(pattern); + return pattern1.matcher(textToSearch).find(); + } + public static String printPadding(String s, int n){ + return String.format("%" + n + "s", s); + } } diff --git a/src/test/java/TestJerkSONParser.java b/src/test/java/TestJerkSONParser.java index 480eb6d..91a919b 100644 --- a/src/test/java/TestJerkSONParser.java +++ b/src/test/java/TestJerkSONParser.java @@ -21,14 +21,14 @@ public void init() throws FileNotFoundException { @Test public void findPattern1(){ String pattern = "##"; - Boolean actual = jp.findPattern(testData,pattern); + Boolean actual = ParserUtils.findPattern(testData,pattern); Assert.assertTrue(actual); } @Test public void findPattern2(){ String pattern = "qg"; - Boolean actual = jp.findPattern(testData,pattern); + Boolean actual = ParserUtils.findPattern(testData,pattern); Assert.assertFalse(actual); } @@ -39,7 +39,7 @@ public void matchedString(){ String test = "type:Food;"; String expected = "Food"; - String actual = jp.matchedString(test, pattern); + String actual = ParserUtils.matchedString(test, pattern); Assert.assertEquals(expected,actual); }