Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Hurtlocker.iml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" inherit-compiler-output="false">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
Expand Down
12 changes: 12 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@
<groupId>io.zipcoder</groupId>
<artifactId>HurtLocker</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
Expand Down
48 changes: 48 additions & 0 deletions src/main/java/Formater.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Formater {

public String[] splitItems() {

Pattern pattern = Pattern.compile("##");
String[] items = pattern.split(replaceApples());
return items;
}

public String replaceApples () {

String rText = replaceBread();
Pattern applePattern = Pattern.compile("(apples)", Pattern.CASE_INSENSITIVE);
Matcher appleMatcher = applePattern.matcher(rText);
String appleFormat = appleMatcher.replaceAll("Apples");
return appleFormat;
}

public String replaceBread () {

String rText = replaceCookies();
Pattern breadPattern = Pattern.compile("(bread)", Pattern.CASE_INSENSITIVE);
Matcher breadMatcher = breadPattern.matcher(rText);
String breadFormat = breadMatcher.replaceAll("Bread");
return breadFormat;
}

public String replaceCookies () {

String rText = replaceMilk();
Pattern cookiePattern = Pattern.compile("(cookies)|(Co0kieS)", Pattern.CASE_INSENSITIVE);
Matcher cookieMatcher = cookiePattern.matcher(rText);
String cookieFormat = cookieMatcher.replaceAll("Cookies");
return cookieFormat;
}

public String replaceMilk () {

String rText = Main.readRawDataToString();
Pattern milkPattern = Pattern.compile("(milk)|(Milk)", Pattern.CASE_INSENSITIVE);
Matcher milkMatcher = milkPattern.matcher(rText);
String milkFormat = milkMatcher.replaceAll("Milk");
return milkFormat;
}
}
41 changes: 41 additions & 0 deletions src/main/java/Grocery.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
public class Grocery {

String name;
String price;


public Grocery(String name, String price) {

this.name = name;
this.price = price;

}

public String getName() {

return name;
}

public void setName(String name) {

this.name = name;
}

public String getPrice() {

return price;
}

public void setPrice(String price) {

this.price = price;
}

// @Override
// public String toString() {
//
// return "Grocery{" + "name='" + name + '\'' + ", price='" + price + '\'' + '}';
// }


}
26 changes: 20 additions & 6 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,31 @@
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class Main {

public String readRawDataToString() throws Exception{
ClassLoader classLoader = getClass().getClassLoader();
String result = IOUtils.toString(classLoader.getResourceAsStream("RawData.txt"));
public static String readRawDataToString() {

String result = null;
try {
ClassLoader classLoader = Main.class.getClassLoader();
result = IOUtils.toString(classLoader.getResourceAsStream("RawData.txt"));
} catch (IOException e) {
e.printStackTrace();
}
return result;
}

public static void main(String[] args) throws Exception{
String output = (new Main()).readRawDataToString();
System.out.println(output);

public static void main(String[] args) {

System.out.println((new Main()).readRawDataToString());
OutputResults printer = new OutputResults();
printer.printAllItems();
}

}


95 changes: 95 additions & 0 deletions src/main/java/Mapping.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class Mapping {

PatternFinder finder = new PatternFinder();

public Map applesMap (){

Map<String, Long> myMap = new HashMap();
ArrayList<Grocery> list = finder.createGroceryList();
for (int i = 0; i < list.size(); i++) {
myMap = list.stream().filter(x -> x.getName().equals("Apples")).collect(Collectors.groupingBy(Grocery::getPrice, Collectors.counting()));
}
return myMap;
}

public Map breadMap (){

Map<String, Long> myMap = new HashMap();
ArrayList<Grocery> list = finder.createGroceryList();
for (int i = 0; i < list.size(); i++) {
myMap = list.stream().filter(x -> x.getName().equals("Bread")).collect(Collectors.groupingBy(Grocery::getPrice, Collectors.counting()));
}
return myMap;
}

public Map cookiesMap (){

Map<String, Long> myMap = new HashMap();
ArrayList<Grocery> list = finder.createGroceryList();
for (int i = 0; i < list.size(); i++) {
myMap = list.stream().filter(x -> x.getName().equals("Cookies")).collect(Collectors.groupingBy(Grocery::getPrice, Collectors.counting()));
}
return myMap;
}

public Map milkMap (){

Map<String, Long> myMap = new HashMap();
ArrayList<Grocery> list = finder.createGroceryList();
for (int i = 0; i < list.size(); i++) {
myMap = list.stream().filter(x -> x.getName().equals("Milk")).collect(Collectors.groupingBy(Grocery::getPrice, Collectors.counting()));
}
return myMap;
}

public Integer countApples () {
ArrayList<Grocery> list = finder.createGroceryList();
Integer countApples = 0;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals("Apples")){
countApples++;
}
}
return countApples;
}

public Integer countBread () {
ArrayList<Grocery> list = finder.createGroceryList();
Integer countBread = 0;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals("Bread")){
countBread++;
}
}
return countBread;
}

public Integer countCookies () {
ArrayList<Grocery> list = finder.createGroceryList();
Integer countCookies = 0;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals("Cookies")){
countCookies++;
}
}
return countCookies;
}

public Integer countMilk () {

ArrayList<Grocery> list = finder.createGroceryList();
Integer countMilk = 0;
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getName().equals("Milk")){
countMilk++;
}
}
return countMilk;
}

}
82 changes: 82 additions & 0 deletions src/main/java/OutputResults.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import java.util.ArrayList;
import java.util.Map;

public class OutputResults {

PatternFinder finder = new PatternFinder();
Mapping mapResults = new Mapping();

public void printAllItems () {

printApples();
printBread();
printCookies();
printMilk();
printErrors();
}


public void printStars() {

System.out.println(String.format("%-20s %30s", "********************", "*****************"));
}

public void printSingleLine() {

System.out.println(String.format("%-20s %30s", "--------------------", "-----------------"));
}

public void printApples() {

Map<String, Integer> applesMap = mapResults.applesMap();
Integer numApples = mapResults.countApples();
ArrayList<String> keys = new ArrayList<String>(mapResults.applesMap().keySet());
System.out.println(String.format("\nGrocery Item: Apples appears %d time(s)", numApples));
printStars();
System.out.println(String.format("Price: %s appears %d time(s)", keys.get(1), applesMap.get(keys.get(1))));
printSingleLine();
System.out.println(String.format("Price: %s appears %d time(s)", keys.get(0), applesMap.get(keys.get(0))));
printSingleLine();
}

public void printBread() {

Map<String, Integer> breadMap = mapResults.breadMap();
Integer numBreads = mapResults.countBread();
ArrayList<String> keys = new ArrayList<String>(mapResults.breadMap().keySet());
System.out.println(String.format("\nGrocery Item: Bread appears %d time(s)", numBreads));
printStars();
System.out.println(String.format("Price: %s appears %d time(s)", keys.get(0), breadMap.get(keys.get(0))));
printSingleLine();

}

public void printCookies() {

Map<String, Integer> cookiesMap = mapResults.cookiesMap();
Integer numCookies = mapResults.countCookies();
ArrayList<String> keys = new ArrayList<String>(mapResults.cookiesMap().keySet());
System.out.println(String.format("\nGrocery Item: Cookies appears %d time(s)", numCookies));
printStars();
System.out.println(String.format("Price: %s appears %d time(s)", keys.get(0), cookiesMap.get(keys.get(0))));
printSingleLine();
}

public void printMilk() {

Map<String, Integer> milkMap = mapResults.milkMap();
Integer numMilks = mapResults.countMilk();
ArrayList<String> keys = new ArrayList<String>(mapResults.milkMap().keySet());
System.out.println(String.format("\nGrocery Item: Milk appears %d time(s)", numMilks));
printStars();
System.out.println(String.format("Price: %s appears %d time(s)", keys.get(1), milkMap.get(keys.get(1))));
printSingleLine();
System.out.println(String.format("Price: %s appears %d time(s)", keys.get(0), milkMap.get(keys.get(0))));
printSingleLine();
}

public void printErrors () {

System.out.println(String.format("\nData Errors: appears %d time(s)", finder.errors()));
}
}
44 changes: 44 additions & 0 deletions src/main/java/PatternFinder.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternFinder {

private Formater cleaner = new Formater();
private ArrayList<Grocery> groceryObjectsList;


public Integer count() {

Pattern pattern = Pattern.compile("##");
String[] myRawData = pattern.split(Main.readRawDataToString());
return myRawData.length;
}


public Integer errors() {

Integer total = count();
ArrayList<Grocery> valid = createGroceryList();
System.out.println("\nTotal valid Grocery Items: " + valid.size());
return total - valid.size();

}


public ArrayList<Grocery> createGroceryList () {

String[] pairs = cleaner.splitItems();
groceryObjectsList = new ArrayList<>();
for (int i = 0; i < pairs.length; i++) {
Pattern names = Pattern.compile("([nN][aA][mM][Ee]:)([a-zA-Z0]+)([:!;*^@])([pP][rR][iI][cC][Ee]:)(\\d\\.\\d\\d)");
Matcher m = names.matcher(pairs[i]);
while (m.find()) {
groceryObjectsList.add(new Grocery(m.group(2), m.group(5)));
}
}

return groceryObjectsList;
}

}
Loading