From c4c6eeacba51cbd75a64ddf8b37b281b80fa3c3e Mon Sep 17 00:00:00 2001 From: Dee Date: Mon, 9 Aug 2021 14:17:00 -0400 Subject: [PATCH 1/2] list edited and tests --- Hurtlocker.iml | 18 ------- pom.xml | 12 +++++ src/main/java/GroceryItem.java | 41 +++++++++++++++ src/main/java/Main.java | 90 +++++++++++++++++++++++++++++++-- src/test/java/MainTest.java | 43 ++++++++++++++++ target/classes/Main.class | Bin 1162 -> 3740 bytes 6 files changed, 182 insertions(+), 22 deletions(-) delete mode 100644 Hurtlocker.iml create mode 100644 src/main/java/GroceryItem.java create mode 100644 src/test/java/MainTest.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/GroceryItem.java b/src/main/java/GroceryItem.java new file mode 100644 index 0000000..cbbc6b9 --- /dev/null +++ b/src/main/java/GroceryItem.java @@ -0,0 +1,41 @@ +import java.text.SimpleDateFormat; + +public class GroceryItem { + String name; + Double price; + SimpleDateFormat date; + + + public GroceryItem() { + } + + public GroceryItem(String name, Double price, SimpleDateFormat date) { + this.name = name; + this.price = price; + this.date = date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public SimpleDateFormat getDate() { + return date; + } + + public void setDate(SimpleDateFormat date) { + this.date = date; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 632942a..15bfb69 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,17 +1,99 @@ + import org.apache.commons.io.IOUtils; + +import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class Main { - public String readRawDataToString() throws Exception{ + public String readRawDataToString() { ClassLoader classLoader = getClass().getClassLoader(); - String result = IOUtils.toString(classLoader.getResourceAsStream("RawData.txt")); - return result; + File file = new File(classLoader.getResource("RawData.txt").getFile()); + StringBuilder result = new StringBuilder(""); + + try(Scanner scanner = new Scanner(file)){ + while(scanner.hasNextLine()){ + String line = scanner.nextLine(); + result.append(line).append("\n"); + } + + scanner.close(); + }catch(IOException e){ + e.printStackTrace(); + } + + return result.toString(); } - public static void main(String[] args) throws Exception{ + public static void main(String[] args) { String output = (new Main()).readRawDataToString(); System.out.println(output); } + + public String findAlphabetCharacters() { + String result = ""; + String jerkText = readRawDataToString(); + Pattern pattern = Pattern.compile("[A-Z]", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(jerkText); + String horation = ""; + while (matcher.find()) { + horation = matcher.group(); + result+= horation; + + } + return result; + } + + public String getList() { + String jerkText = readRawDataToString(); + Pattern pattern = Pattern.compile("##"); + Matcher matcher = pattern.matcher(jerkText); + + return matcher.replaceAll("\n"); + } + + public String correctSeparator(){ + String fix = getList(); + Pattern pattern = Pattern.compile("[!@^%*]"); + Matcher matcher = pattern.matcher(fix); + + return matcher.replaceAll(";"); + + } + + public String separateBySemiColon(){ + String list = correctSeparator(); + Pattern pattern = Pattern.compile(";"); + Matcher matcher = pattern.matcher(list); + + return matcher.replaceAll("\n"); + + + } + + + public int countMilk(){ + List indices = new ArrayList<>(); + + String jerkText = readRawDataToString(); + //any instance of the name milk + //find a price of 3.23 + Pattern pattern = Pattern.compile("milk", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(jerkText); + for (int i = 0; matcher.find(); i++) { + indices.add(matcher.start()); + } + return indices.size(); + } + + public int countCookies(){ +// List ind + return 0; + } } diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java new file mode 100644 index 0000000..873ffdd --- /dev/null +++ b/src/test/java/MainTest.java @@ -0,0 +1,43 @@ +import org.junit.Assert; +import org.junit.Test; + +public class MainTest { + + Main test = new Main(); + + @Test + public void findAlphaTest() { + + String look = test.findAlphabetCharacters(); + + System.out.println(look); + } + + @Test + public void formatListTest() { + + String look = test.getList(); + System.out.println(look); + } + + @Test + public void findMilkTest(){ + int actual = test.countMilk(); + int expected = 8; + + Assert.assertEquals(expected, actual); + + } + + @Test + public void correctSeparatorTest(){ + String look = test.correctSeparator(); + System.out.println(look); + } + + @Test + public void correctAndSeparateTest(){ + String look = test.separateBySemiColon(); + System.out.println(look); + } +} diff --git a/target/classes/Main.class b/target/classes/Main.class index c9d3858bc278f548c9eaabc471ed4e0ba034dcf0..9d53861c1a71fcc6064d293485a3765561d548db 100644 GIT binary patch literal 3740 zcmaJ@Xs^+fo9P;voHH`6K(xoqnQpH@xVhz`+#XZ0195@a zjNuMgdZ8dt*W9A5pY$eEaj4j-V3&&Bs1ew`Xdbb8(>*hME}2sAWTz)ri4 znVU%kk>m`w>%w`BVI0C?1xHlegL}&$f<*y^<|G_}JsZFWw&JKogQT{Rh_>@}QNeM6 zed}QTgZ)L*A|)~0CxAGPp+P~bK&`j0=$cknI-}=uh7(5%+NFaIt_BVQhEg(HE$CA5 z4!o0G&FY0=W5LzT9MLkD<8t+cN)a%uST0zS&K^+lAl}W)>-oHqn-b{Q4*C}60??@# zx&=gBn(tBZkd##3DaZId#*no|zwY^b9>6!=ox5^I~>w zpKS$00#!r0$)g&=ayX~reR5BoW9U3GCD2qEQ$S2*0}H045I&&dX$edgx@H#K z7@pzF#L-hv9B;i6!-oU}{b+bj#q)AsO~!T{_RX}B*B#xp9R)9zv+P0aa~yq9T8iTZ z8RW;vLe{kAB?~X9cp0ydg@UU)R1m9lFpf{+Qwlz<;xqVcxdnI)dNAiw15A-}UAKzH z$h1Ixb2-12J5tqn6`xn|1r=Y!O*Y>3HX?!04{L5ygYvt7s%2cB{j!R$NL*C~^GP<3 zssVe7Kf7fs87^ig4QEtVu|PtzGrDzAcTD*nOjfzGCNmk;WPzo4+VVP3VoU$vno{uF z8X5DKJ<5V!$8|v`>t$6@^IWUW$h)ZA=l4~Z_wJ+MCZYdnuQ+zCRj2IVJRfDpDOzMB zS#i`?LbV4&<&FAb=k#{t`(H>Hbs+Pk{_J9meaRHsxkj)z;Xz&G$sz6sg*Ir6Z03RO@z_jGFsN(t543TnsN5_Ki) zE#crYjt;Hh*jS=z8O_5hXc=o?Mq77PvZ{p6n@Gyv`@16@$w&z&6Yt@0X=(MJayI1+ zOGtJ{f+w{*nv5i)C7en|-daN3xAI6w34^x~MhDK}abA++vd{Ck5jkArH5c}R>E#y| z_#Z-{a1aYP;*oHcf%cG)Z{geW zYXW`v4!+Cq3w-+?miR;(0*YcN;`{gkNlIc0Kg5qnY9q1z7(XGRpK@nEVyiR~QJ^WP zS5T|qn8NP?9OirPDsvRww8Uu$4zd3r)UV)llzV=LTYe%iLJu;#bt}-umN8tyi1s?p zx0UetdQNxIInaP=f=S@G7goK046osJu2qwwpEE!yiC>hnjDK)XRDw=4X-xFUP~uAD zHuT|+_7aTlszj5YCG#eZ%53GjBQopDxJLIUz2q`W+S2OZ+iuZ{pOPlR2b%fTLZ7Wn zP8$=^PSQJwu#>Z0IEDK?jJ>}1fZQ-1CXo^&zoYO=K81Mt1WH(@HECl8x0#Luw0_4+ zmL&WTLaUteS$#tR|E?;S;{(WqkarkISr8WO$z<-Ap=t@|Hr%0hMq&(iNR8f*G59r- z@b*1O0d$kO6ovJWhqu)~AK;BpP!c5@Fm`$0&%fT*^M|#>vz4B=i}_J{evFi=-z^{!-wHkuaK@P+4j?n?rzK=cm^A4msp7v@O^1Q2YPqK4I&NffQ%4yU9W$8KFsDOP z#~NhTCrGOes5g0FjJdJJ%lwp-67yBGD zRnUm*4W`n!f<|aNuUsWPr_{}>+y;g)Y~UX5Yj|MbAs$giTkm{)7;AWJ;0YErEE#wT zb~UZI2F6g*@Z7))ENggaU0y9bWVyv45TSeHPy>cp*{5b$3wTTZrUq)Th# zhC7r_ecm$6ZS-mzE`KGb6a1c*kM&Ej*d!>>v+q%*R3PzD?|6V z1+=;XdAu&Aewuc0nGeR``vOuBYW7@5xHD-5?cmH2#5ev7V3cd7eDG0;THnk}T882o|E`rKFglUTzojD{?~0&=aG(+RH~Gs_&~m|*Mz zIcG7+^&I(Wdd`z^0aNs-j2pBAw8dZ0-X9^`M9%sSeYS~wxA-LC5b{)6pd2M)JfYzt UE^(J Date: Tue, 10 Aug 2021 18:15:39 -0400 Subject: [PATCH 2/2] list output --- fixedList.txt | 23 ++++++ src/main/java/Main.java | 154 +++++++++++++++++++++++++++++++++++++- target/classes/Main.class | Bin 3740 -> 7606 bytes 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 fixedList.txt diff --git a/fixedList.txt b/fixedList.txt new file mode 100644 index 0000000..93ba446 --- /dev/null +++ b/fixedList.txt @@ -0,0 +1,23 @@ +name: Milk seen: 8 times +============= ============= +Price: 3.23 seen: 5 times +------------- ------------- +Price: 1.23 seen: 1 times + +name: Bread seen: 6 times +============= ============= +Price: 1.23 seen: 6 times +------------- ------------- + +name: Cookies seen: 8 times +============= ============= +Price: 2.25 seen: 8 times +------------- ------------- + +name: Apples seen: 4 times +============= ============= +Price: 0.25 seen: 2 times +------------- ------------- +Price: 0.23 seen: 2 times + +Errors seen: 4 times \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 15bfb69..37b2140 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -2,6 +2,7 @@ import org.apache.commons.io.IOUtils; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -33,6 +34,18 @@ public String readRawDataToString() { public static void main(String[] args) { String output = (new Main()).readRawDataToString(); System.out.println(output); + String actualResult = (new Main().doingTheFormatting()); + System.out.println(actualResult); + + try { + FileWriter editor = new FileWriter("fixedList.txt"); + editor.write(actualResult); + editor.close(); + + } catch (IOException e) { + System.out.println("No groceries for you!"); + } + } @@ -83,7 +96,6 @@ public int countMilk(){ String jerkText = readRawDataToString(); //any instance of the name milk - //find a price of 3.23 Pattern pattern = Pattern.compile("milk", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(jerkText); for (int i = 0; matcher.find(); i++) { @@ -96,4 +108,144 @@ public int countCookies(){ // List ind return 0; } + + public String formatName(String input){ + try { + Pattern pattern = Pattern.compile("name", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String edit = matcher.replaceAll("Name"); + return edit; + + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + } + + public String formatPrice(String input){ + try { + Pattern pattern = Pattern.compile("price", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String edit = matcher.replaceAll("Price"); + return edit; + + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + } + + public String changeMilk (String input) { + try { + Pattern pattern = Pattern.compile("milk", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String milk = matcher.replaceAll("Milk"); + + return milk; + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + } + + public String changeBread (String input) { + try { + Pattern pattern = Pattern.compile("bread", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String milk = matcher.replaceAll("Bread"); + + return milk; + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + } + + public String changeCookies (String input) { + try { + Pattern pattern = Pattern.compile("c[o0][o0]kies", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String milk = matcher.replaceAll("Cookies"); + + return milk; + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + } + + public String changeApples (String input) { + try { + Pattern pattern = Pattern.compile("apples", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String milk = matcher.replaceAll("Apples"); + + return milk; + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + } + + + + public int findGroceries(String input) { + Integer holdingValue = 0; + Boolean checkVal = false; + Pattern pattern = Pattern.compile(input, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(readyForFormatting()); + while(!checkVal) { + if (!matcher.find()) { + checkVal = true; + continue; + } + holdingValue++; + } + return holdingValue; + } + + + public String doingTheFormatting() { + String result = + "name: Milk seen: " + findGroceries("milk") + " times\n" + + "============= =============\n" + + "Price: 3.23 seen: " + findGroceries("milk;price:3.23") + " times\n" + + "------------- -------------\n" + + "Price: 1.23 seen: " + findGroceries("milk;price:1.23") + " times\n\n" + + + "name: Bread seen: " + findGroceries("bread") + " times\n" + + "============= =============\n" + + "Price: 1.23 seen: " + findGroceries("bread") + " times\n" + + "------------- -------------\n\n" + + + "name: Cookies seen: " + findGroceries("cookies") + " times\n" + + "============= =============\n" + + "Price: 2.25 seen: " + findGroceries("cookies") + " times\n" + + "------------- -------------\n\n" + + + "name: Apples seen: " + findGroceries("apples") + " times\n" + + "============= =============\n" + + "Price: 0.25 seen: " + findGroceries("price:0.25") + " times\n" + + "------------- -------------\n" + + "Price: 0.23 seen: " + findGroceries("price:0.23") + " times\n\n" + + + "Errors seen: " + countingErrors() + " times"; + return result; + } + + public int countingErrors() { + int counter = 0; + // beware + // receive 2 errors on 'milk' - milk shows more than the given prices (2 times) + counter += findGroceries("Name:;"); + counter += findGroceries("milk") - (findGroceries("milk;price:3.23") + findGroceries("milk;price:1.23")); + return counter; + } + + public String readyForFormatting() { + String result = correctSeparator(); + String result1 = changeApples(result); + String result2 = changeBread(result1); + String result3 = changeCookies(result2); + String result4 = changeMilk(result3); + String result5 = formatName(result4); + String result6 = formatPrice(result5); + return result6; + } + + } diff --git a/target/classes/Main.class b/target/classes/Main.class index 9d53861c1a71fcc6064d293485a3765561d548db..7f0c53b7c5c84cf784e6836f558069e067dbd0d8 100644 GIT binary patch literal 7606 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 QKy6{mpcz{UzeYXt--1R`rT_o{ delta 1604 zcmaJ>>vI!T96g)OX1D3~wa_Qfp)HM&G;~DKX(~vo%oJH#wK`x+TVoqzLTTD0MMNQ> zfKO0ZtD=A)LVY3yOEi-0emmp3u>c0jt}&M(e|qI>LC$I^}H5 zi(;FKK^@zzzn%5oC}KK>v6M-|@!06F8_OVTNJwzh)rmBtBFzp7erumnWj&&lYEkUe z@eFoZBTC@@=XC5Ar`2#MX+{!B4Jl5#Yu5GFdwVqOlOQ#_Vd4cH`$b%Fe=Hsk^(Q++ z!@+nk8H=kpXkAk(Rvi$qFH3N4j|^^eBZ^mbyoN*Ml}HBTNeS}u6&u`m9dD>OqT?tm ztI5@rKZdtdyshIM9J6-2ZZ90edpeGbbIwF$*QHKw&j6faIrl>fg9ON>=o}MqzMijILTIQ13KQfTRQ-!aGEm- z4`C_W6IM;}*_0i;7De1Bf`(#Lq6BqV06!LDHA-<0%Fu>#Y~;>^sKOTR4Ph}xI8I;@ zcB0w_X@kmG9UtHf+4<3e4{;Vw#wa+4agM+n$WYKQijVLyNt9M%0H5GfvaUlHKEvmb zao*}GX-nY?To5#Qu7leS_6ufUJ~oN=G&;-vy?TZACrE<9In|D+ubPwm$0EK+XK5xRR@lScg?M$+a2y ztTr<4r3`0;Jv9XI6^9NUzXNGZGMz{g#uVkOV)|)Y?DK?L496^&Tq;Zzm+h}lMU(?j z3rUziE9M~ciOZ-E#hONZ3dv0kEG5+LH=5FTS`A>dwiZnj^mv0*HN;C#2y?EcXbO-P#+szcci;uONk8vwJ=;5>7 z%FF7@nX4L0@EyKqL3DZU2?lT#KagSp<1;Q>NMmMPwg|WF$=d8k9?}^m%y<<)ag?)L sb=GcUIlD=~zqF!+pL5kWaK>dgWI=xZ&uPFWC~}MSxu4T7_UzaH0ewOkl>h($