From dbe74c1e8e1adc21d890d536ffaad5d867f1abe5 Mon Sep 17 00:00:00 2001 From: johnS93 Date: Mon, 9 Aug 2021 16:25:53 -0400 Subject: [PATCH 1/2] Hurting me real good --- Hurtlocker.iml | 18 --- pom.xml | 12 ++ src/main/java/GroceryItem.java | 40 ++++++ src/main/java/Main.java | 225 ++++++++++++++++++++++++++++++++- src/test/java/MainTest.java | 46 +++++++ target/classes/Main.class | Bin 1162 -> 7696 bytes 6 files changed, 319 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..de7abea 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ io.zipcoder HurtLocker 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 11 + 11 + + + + diff --git a/src/main/java/GroceryItem.java b/src/main/java/GroceryItem.java new file mode 100644 index 0000000..6aba13b --- /dev/null +++ b/src/main/java/GroceryItem.java @@ -0,0 +1,40 @@ +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..71421b1 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,17 +1,234 @@ 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"); + } + + }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 jerkTest = readRawDataToString(); + Pattern pattern = Pattern.compile("[A-Z]", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(jerkTest); + String horation = ""; + while(matcher.find()){ + horation = matcher.group(); + result+=horation; + } + + + return result; + } + + public String getList(String input) { +// String result = ""; + try { + Pattern pattern = Pattern.compile("##"); + Matcher matcher = pattern.matcher(input); + String result = matcher.replaceAll("\n"); + return result; + } catch (Exception e) { + throw new UnsupportedOperationException(); + } + + + } + + public String correctSeparator(){ + try{ + String jerk = readRawDataToString(); + Pattern pattern = Pattern.compile("[!@^%*]"); + Matcher matcher = pattern.matcher(jerk); + String result = matcher.replaceAll(";"); + return result; + }catch (Exception e){ + throw new UnsupportedOperationException(); + } + } + + 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 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 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 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 String nameChange(String input){ + try{ + Pattern pattern = Pattern.compile("name", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String milk = matcher.replaceAll("Name"); + + return milk; + }catch (Exception e){ + throw new UnsupportedOperationException(); + } + } + + public String priceChange(String input){ + try{ + Pattern pattern = Pattern.compile("price", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String milk = matcher.replaceAll("Price"); + + 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 doingFormatting(){ + 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("price:1.23") + " times\n\n" + + "-------------- ---------------\n" + + + "name: Cookies seen: " + findGroceries("cookies") + " times\n" + + "=============== ===============\n" + + "Price: 2.25 seen: " + findGroceries("price:2.25") + " times\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; + + counter += findGroceries("Name:;"); + counter += findGroceries("milk") - (findGroceries("milk;price:3.23") + findGroceries("milk;price:1.23")); + return counter; + } + + public String readyForFormatting(){ + String result = getList(correctSeparator()); + String result1 = changeApples(result); + String result2 = changeBread(result1); + String result3 = changeCookies(result2); + String result4 = changeMilk(result3); + String result5 = nameChange(result4); + String result6 = priceChange(result5); + return result6; + } } diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java new file mode 100644 index 0000000..418e2f6 --- /dev/null +++ b/src/test/java/MainTest.java @@ -0,0 +1,46 @@ +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 formatTest() { + String input = new String(); + String look = test.getList(input); + + 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); + } + @Test + public void printTest(){ + System.out.println(test.doingFormatting()); + } +} diff --git a/target/classes/Main.class b/target/classes/Main.class index c9d3858bc278f548c9eaabc471ed4e0ba034dcf0..1cad08d1ad309aa22bc601e0c71a0394705edc58 100644 GIT binary patch literal 7696 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 UwYt4hWjL1LbC24fUWL@}0UFocfdBvi literal 1162 zcmZuwYg5xe6g^8z)288JOF>i=-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: Mon, 9 Aug 2021 17:24:31 -0400 Subject: [PATCH 2/2] fixed up some methods and formatting --- src/main/java/Main.java | 30 ++++++++++++++++-------------- src/test/java/MainTest.java | 7 +++++++ target/classes/Main.class | Bin 7696 -> 7681 bytes 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 71421b1..51d293a 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -101,10 +101,10 @@ public int countMilk(){ public String changeBread(String input){ try{ - Pattern pattern = Pattern.compile("bread", Pattern.CASE_INSENSITIVE); + Pattern pattern = Pattern.compile("Bread", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); - String milk = matcher.replaceAll("Bread"); - return milk; + String bread = matcher.replaceAll("Bread"); + return bread; }catch (Exception e){ throw new UnsupportedOperationException(); } @@ -126,8 +126,8 @@ 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; + String cookies = matcher.replaceAll("Cookies"); + return cookies; }catch (Exception e){ throw new UnsupportedOperationException(); } @@ -137,8 +137,8 @@ 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; + String apples = matcher.replaceAll("Apples"); + return apples; }catch (Exception e){ throw new UnsupportedOperationException(); } @@ -149,9 +149,9 @@ public String nameChange(String input){ try{ Pattern pattern = Pattern.compile("name", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); - String milk = matcher.replaceAll("Name"); + String nameCh = matcher.replaceAll("Name"); - return milk; + return nameCh; }catch (Exception e){ throw new UnsupportedOperationException(); } @@ -161,9 +161,9 @@ public String priceChange(String input){ try{ Pattern pattern = Pattern.compile("price", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); - String milk = matcher.replaceAll("Price"); + String pricCh = matcher.replaceAll("Price"); - return milk; + return pricCh; }catch (Exception e){ throw new UnsupportedOperationException(); } @@ -187,7 +187,7 @@ public int findGroceries(String input){ public String doingFormatting(){ String result = - "name: Milk seen: " + findGroceries("milk") + " times\n" + + "name: Milk seen: " + findGroceries("milk") + " times\n" + "============= =============\n" + "Price: 3.23 seen: " + findGroceries("milk;price:3.23") + " times\n" + "------------- --------------\n" + @@ -195,12 +195,12 @@ public String doingFormatting(){ "name: Bread seen: " + findGroceries("bread") + " times\n" + "============== ==============\n" + - "Price: 1.23 seen: " + findGroceries("price:1.23") + " 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("price:2.25") + " times\n" + + "Price: 2.25 seen: " + findGroceries("cookies") + " times\n\n" + "--------------- ---------------\n" + "name: Apples seen: " + findGroceries("apples") + " times\n" + @@ -231,4 +231,6 @@ public String readyForFormatting(){ String result6 = priceChange(result5); return result6; } + + } diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java index 418e2f6..b561ba7 100644 --- a/src/test/java/MainTest.java +++ b/src/test/java/MainTest.java @@ -1,6 +1,9 @@ import org.junit.Assert; import org.junit.Test; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class MainTest { Main test = new Main(); @@ -43,4 +46,8 @@ public void correctAndSeparateTest(){ public void printTest(){ System.out.println(test.doingFormatting()); } + @Test + public void nameChangeTest(){ + + } } diff --git a/target/classes/Main.class b/target/classes/Main.class index 1cad08d1ad309aa22bc601e0c71a0394705edc58..401a8e66b7548c7634394355b87f3ff6811dcee7 100644 GIT binary patch delta 2839 zcmb7GX>3$g6#mX^Z#sS5hIZPa3sWfDbhUt$p+W#9CA6hT6b%xnr70C?n*z~jw4x@4 z9~k7BnDD~{1A>53Lch*l$J+KrdT6ShU+={xTGghtS>SGIZLH(u>ojYW>BAOm)$oRn z=dewT8Cr?!O&vRoXSASa3*OSP%V^iqGT+v*2g?QC#-@dL)y`YQeU;d!;~l(foYcaB z1A?UaBs|LW9~o9uI?RjrjF2~V`XNHyXN7f`%M`n)r4JmuUeH+CIE!!4>>NFG0-2Rdm9E0k~5j0;f2PYX3ydDJ~P`d4JwW#V8R@ zjv;c&g`cYxW`O&EKH?S+pYiaDMs(%IYjeEpuOP?U`sBB%^`jXV4~WgeiQx=Vt@ol> z;%GULgdyUScwz;J(;zx|_eHiOsHjAtWx>(ODUXIqO%l}~W@@;f1~@IMWH@$k82_#4y}Q7r)v;gf6s{7+NrfmTjXE90M)1E{uCk4C!NIOiCL% zMd{%;6`jloYv^wZQZUujBy7%S*o@s&C)LJJu%k_3rKrq08AlqHlUs+eFKsHB2Lpp+ zI^{6y0ZBJAIL`LwMMN?r$Q=n7A${rB!HgBzie+N3rI=)rpQ>7GeU_asQ@I>VIjo2& z$B-{kRZ-^`47$VE9mtdyjAiLLq;w_FFGfj=r7$6u!Ze0)h(ug0|q^FX}#`GIAdAiq3&RmDd zi#?dE?a8D~iO>4y*hV2AqZEsghR0d3PcR2hnnj=v+W%$iaIZPC<925&U{*w~e_aof z8*I7Kf;Udm`d$-Yhwdg|fCr%!xpP~^Csah0U2PmI6`mW`Bu%oBJ5u}DT=*e|9*2k zXpZk+Gk##&*0|2JKQzaW)fmN*ZTJkR%x|YN2jiKTHEMeI%~fH?Gl7@3brXsDnPTU4 zHltG{@|@+FVgKiJI7=Dq3_bYFn$2mIFXjJ4R=Sxl>t@We{X5WK^4LpxGh#<9$UWTQ z<-W2oi9Qv@mz7~QpA%JK3UInQOu@d3xWYkK6hB1VVI|zzh$kHML~%Z%1vNV)I_Ph@ zIfXc!<^^gj$_|(u?y$Vu9OBrgtr*oEJCOC}VB6>~gJ?M^OQsAqYcP*D#t>R=6d+!P q((+(9@2M~?jn8})sT4>dpNX`JDBN&!yjgDHoR9A#Ju*seMetvIU@d0= delta 2930 zcmcImYiv|S6#mY>?(ObvOP6-b(g!V+*S1h7AhJ{th=`%(AyG7Fpp;q*r6r{#YN8b- zF~p#TOJc$=B_N`xAiBI1QSbryKm`;P5nm`TUx12A{bug%mW}+BW;^%H+?n%z=X^6~ z?&8YFDua73ZrcH1xLmt2xF^syyQQvXj)^q_|5(RdEAUk}G|n@zPLN(Zqj}Kn>VIBC z-9i)33XE~h%}(bzL7-;Af=2b?1=?d=dm}wG)y%Imv5D3sZM{r@1uYG=9NbKEiZX-P z8pJjO+bukfSL~_A;AuN7yoMq{SaG>~d~*wb^J`jL8=C4l8?Re<1A_(D?B?dix|*h& zYZ@2P%?j+c@FtcE%!Z~`cd!a?TX+Y1?1M&3_ANKF+ujpo&SzvJHIew>ffYkcd>{y3 z+W(Ld)^B`_Y%0iuC=ORVXGSZ*1~sc%&NV!rm4Qp$*p>E+`fsowu=;TJuuq#383s^Q-(oZWPN+5wTSc7EuP z?X&h}3=T?#3^8OV3Cl41h_yR!xWFS~$_VkSQx4)q`cFAuo)Ou!KYgj#Co+56ZJEcV z(ys3k^NkV|+H<=U+MBu*jylIJSI!&=pZ?fp$VM6-oM#)*gCYD*+j1u05B$lVU@D5( zp0hKvo|NKg}10R~$yNGsLz+J8n6AOr{fTNfx9`O>j z7j6=t_~Dg+Jvw}YVTh?w9u1d_P>eF*Wm|+0iV@~)g&E;GpsS=wkk1fI2@zenwp@;< z!V}1GSl7}vHGdT2;wf`kcrjFbdcKKrNvGvOCi+Q+WD+YvoOE`06 zyU}KGr>M+&8AlY$$?cq-$eBjw!ARevPKC^RcgfQk9P4^B5tn=^;EHq%lS2CSFk=H< z#q!YCQA~P}pW3y~eD2mx@0fsGBq( zyxLxzTS%g(BR!HtjbvielZnk?aF39lj~l#G#^R)m#i=sh;>gGXp^}k;zbpm+sRZtc z`=Y)L)!XfdbF<0hiQFr}lI;g_A*RfN@0@t z50l33S0X38+TEO-;Sn;p9VU8N{Hob(nN+GMsqGs};8h-|;c@?f1a_`OpQt~9hLs5U z)U>tjr^@1ivIKVdW~sH&!1T54hgE+){dsZT9+Ov|Jbpw-9;=DYv7#2^rC55BK@el4 zmy~c-7Hfy9>^`3La$P5!dR_o;JBK>zIaV0h>XdZeFZ@D~-cI2o^m?9eb>U2ig_liC z;H_AAuWsMf?JC{AuiO2){Yba#b$dX!hg6%ur`zy3P*u8t&UoM2@%)i9I`6XyZam|8 zxjXlhsLvNSuX7lkB2nV4%!`G;q{CUtSf>4V@|iVM6U0h*u-S8NRK9s;$RWTO7Z>nPy;QL823ie~%7mNB5I2HHDlyE=A1F>iz zfnVcB)Nn(hgPz*WF{JTI%!GYMK}2)7(edtbNMrSOVpKP8UtQ62$g3YMFJ;M-{<@5o z@E(cL@}mqPDWw&_P~Ki;vIIO1D=_oMS=uM+W2?8I9<_Y7jpm