From a8c0a335771fe4996bee48b4c1cd518ef34401a6 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 9 Aug 2021 16:59:03 -0400 Subject: [PATCH 1/2] Almost Done --- Hurtlocker.iml | 18 --- pom.xml | 12 ++ src/main/java/GroceryItem.java | 40 ++++++ src/main/java/Main.java | 223 ++++++++++++++++++++++++++++++- src/main/test/java/MainTest.java | 43 ++++++ target/classes/Main.class | Bin 1162 -> 7093 bytes 6 files changed, 314 insertions(+), 22 deletions(-) delete mode 100644 Hurtlocker.iml create mode 100644 src/main/java/GroceryItem.java create mode 100644 src/main/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..5ac4bdd 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,18 @@ io.zipcoder HurtLocker 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 7 + 7 + + + + 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..16f8995 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,17 +1,232 @@ +import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match; 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) { + 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 int findGroceries(String input) { + Integer holdingVal = 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; + } + holdingVal++; + } + return holdingVal; + } + + + public String correctBySemicolon(){ + 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(); +// 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 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 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 priceChange(String input) { + try { + Pattern pattern = Pattern.compile("price", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String price = matcher.replaceAll("Price"); + + return price; + } 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 bread = matcher.replaceAll("Bread"); + return bread; + }catch (Exception e){ + throw new UnsupportedOperationException(); + } + } + public String changeCookies(String input){ + try{ + Pattern pattern = Pattern.compile("Cookie", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String bread = matcher.replaceAll("Cookie"); + return bread; + }catch (Exception e){ + throw new UnsupportedOperationException(); + } + } + public String changeApples(String input){ + try{ + Pattern pattern = Pattern.compile("Apple", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(input); + String bread = matcher.replaceAll("Apple"); + return bread; + }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 bread = matcher.replaceAll("Milk"); + return bread; + }catch (Exception e){ + throw new UnsupportedOperationException(); + } + } + + public String formatting() { + 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 countCookies() { + return 0; + } + + public String readyForFormatting() { + String result = getList(correctSeparator()); + String result1 = changeApples(result); + String result2 = changeBread(result); + String result3 = changeCookies(result); + String result4 = changeMilk(result); + String result5 = nameChange(result); + String result6 = priceChange(result); + return result6; + } } diff --git a/src/main/test/java/MainTest.java b/src/main/test/java/MainTest.java new file mode 100644 index 0000000..fc58788 --- /dev/null +++ b/src/main/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 formatTest() { + String look = test.formatting(); + + 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.correctBySemicolon(); + System.out.println(look); + } + + +} diff --git a/target/classes/Main.class b/target/classes/Main.class index c9d3858bc278f548c9eaabc471ed4e0ba034dcf0..ca57131a5ef47beaf6c66a0bb9871d4f231dd711 100644 GIT binary patch literal 7093 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 ceeB~bNLdz>M0)a>R8nq&X}0L<0nm;e9( 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: Tue, 17 Aug 2021 10:30:02 -0400 Subject: [PATCH 2/2] Milkman Nick saving the day --- src/main/java/Main.java | 16 ++++++++-------- target/classes/Main.class | Bin 7093 -> 7122 bytes 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 16f8995..c07815f 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -158,9 +158,9 @@ public String changeBread(String input){ } public String changeCookies(String input){ try{ - Pattern pattern = Pattern.compile("Cookie", Pattern.CASE_INSENSITIVE); + Pattern pattern = Pattern.compile("C[0o][0o]kies", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); - String bread = matcher.replaceAll("Cookie"); + String bread = matcher.replaceAll("Cookies"); return bread; }catch (Exception e){ throw new UnsupportedOperationException(); @@ -197,7 +197,7 @@ public String formatting() { "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;price:1.23") + " times\n\n" + "-------------- ---------------\n" + "name: Cookies seen: " + findGroceries("cookies") + " times\n" + @@ -222,11 +222,11 @@ public int countCookies() { public String readyForFormatting() { String result = getList(correctSeparator()); String result1 = changeApples(result); - String result2 = changeBread(result); - String result3 = changeCookies(result); - String result4 = changeMilk(result); - String result5 = nameChange(result); - String result6 = priceChange(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/target/classes/Main.class b/target/classes/Main.class index ca57131a5ef47beaf6c66a0bb9871d4f231dd711..c13c55d7001dcc04d1ac12261ab85d3d54322b74 100644 GIT binary patch delta 2887 zcmb_d33OG}72W4g_vYorB>!jlpAZw0fbdBS$Pft%Mx=t0;7~`15HZ?_5R}w9v_`=y zVq3-6Iw2|oN^v&&1+`R5Z5?U{Ye#CSEoxgzYwK*Qai8~|AG%h%T&(3<|DSu#efOTd z&pG$p`$)@+E&b1Z^w?Ga<7Bdfxp+v$fP;teh(XTcQ3so`#ld5E+(8Ua7<|WKtAhen zzw5xolPaE4@jad1X7PPBo;LV_gA{&f@Qj0UJgXm{GkD%XT2a#YQ2}1SkNX|`1V6R- znZb(=_Q%gvyyV~)_@#

9&U~ey!8L(V5>GY&ZCwgONJ_vc>Nm?7$x!yn;Wf+drwc zQ|De)^EHdtE&gor7q$LsvD#vn#osK}TI{yy|GULMEZ(sAr^UZ4-c-Q1EZ(+w$KqX! zbr$bgyl?S=#lJ27WAUNIM;3!tU`4D%tVFHE=w9Mh5;__cRz-mdM@69uS4EML{RD|a zdKUNeO&PdI4wKaLMv9qlW|vuI=9o0^g~&Ej!mJo6^=^osAltp&(G{_zk<`G2u?bSr ziPKyulX4>!u2f3e+ZwM)6}ys=Ax5fP8H#Qfol@<+5g%98Df_!pBekv!vG%T>#V*c3w~#vLFyt>U$5WBxiTIry_XZm z)FoY+AQKstjx8>}t^5ww4U@3O#W&FH%{H0nwOHjXG!xTB)8>rn?bQFmp6;arGp)B* zHE*LCo2Zjk!E~>!pv-&I>@p>%pV!@W#^iw=c84_If;CKfZC}r#?xilS!b%q#RNSFr zy^1?k+^phutQ^?wtcZ5ZWoH0M2$*fkd9<223deZ%QOJW-BA8E^@F!h#QFns{I2{XU ziDry)p0{nkw`IP!rFdGuu9^XZsa$&|&f@MST!1g2hfTH#ah#2X)WALrd|2FrbFheB zGFXkp=p|}BR$&RwMHJ_8rKe{qhr$%f7FDwCtgq%B!JUxncX)^vV$2ON*a|*IUuqsPUP?9ZmC=qozmAY!95ZnpJhFFi1ip!H z5vdf1`timv6bJe71{tkJbdXc|j9zbWLy%NfxSXIj2H}y~IdrH8G@Z@CTUIuNOxBcD zPST8KgAXB-I8Vh*VcbPwmP>i^wW3kFWW)K<>@I7ikCEkjs$%kaD$3`noO@RLRmtpC zm0|g)hy8a|P7X50-uE$XFQ0Jed@@Y>43{y4<@9_x>UgS@d2oswLT?ey--_F~Q}jmg zJtQlXWqZY^vs}B+EO`_87*8w4b(J+|DJ4Cg|1S~i_8EfroI=p=1_rM!F)VqAH!0oN zKc6~#iE=IR?m!XN@zq|>!@q%7&YgaGK3gulefMzjcBaQOv1g`h@`w4ei<%ev9;7hp zsqxLIX>S~zLv2S>a%v7ET4R~m1MQD{yDG}aB$N5{67PHd?+UMnRhhE>!*VFeCMV`F zA&0i);l9-pTGM>%;Ltk4x2A{I=X~qP(3;^}Geher-#R+9X8BfoXm$A3?9e)9ly4pz zn#ZY?!|_Vx^VD;woHhCZo(4W{Ui*;AepQ0@*c7(MMt%z}ZNbK%!MMJWnbxZ-61^wb zO&L6m+xL1JBcTt`=RT~>Hu|$%-I67du{oSDE6eJf*q&|7;iOR=*`^#$ZjEI#u^dim zjb}6Q98PUbWHX5z=CqoO`Gjp#Rn?*f>?D&{F&?k^sK*7KL(~Es7&0&BgR+TT6yaH~ n!`;-Py#K2B*y_dKz^m(CYH|81#C_Bf^ccnc)C^e%h!1`YP)6p! delta 2814 zcmb7FXLwXa6g{(ThL;yeHYB@AfFvXolOVk$q1p`YJL98f>peP`M3fK_~`pmRFdiyiIvtQzX#6b&<_5SAyhb(-7!xoO!cv7F74m*kIHB;f!byc+G}^BUzbX8#a7tmB!XFBMI$0toiRXn^37^(}3a6jQ z^h#k@P7{4Z%1$W~*)jHqePQh^+u7~eA#1WODQYiOV8rh<;xIl`0TNH>)XF(t@ zuTV6xFAAR*?=i?#Ba8nQS8i-OI}-O&sTJkPjaZjhJ`)Ez*T z(2Jrs|ErMF73x3yw6D;fzAA?Io$Ud1lb8`8UvI=srj~t4dF^%GHHi;2Kmr=FFO5z8 zX*>?z#+xydIspo|utqWmx4NBZnLLP{n3G&kK8hZlSw9inTD|N_x$#$spn@w8YM~`& z;WlEWp%AliJG+xXv^)6KZ|biDPZhUf_1`JMzq=&naG|pkdcY>{oM3w*4-aMyJB=Jb zvWe~CED}s?FKQD>=iuWlR-DG&rlM>&Lm(UXm<)C2Ir$+H_cA(3X)yK%I};B*ux9riM$g4i?ArD|YkqqYqi~ z5VN&4i%Y8pC;vWo4zr8E@E-A9Hnc^OF|~+)gCAeNX01&@=TCg!j$VCsQL8Ix0s> zIh`IekVy8Wl2u{yDxI7f#V@*Y8SiOgyr-#*wvaeJdY+kJPP{`o|D52^SassB6)y}oL8>@$F z^)%MSuGPy}y_u4e)(kQ;36$AZ&<9=kcdyKp%K4U!y*B#u87EVc{&^iDB