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
73 changes: 72 additions & 1 deletion src/com/walking/lesson43_map/task1/Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package com.walking.lesson43_map.task1;

import com.walking.lesson43_map.task1.exception.RegexValidationException;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
* Реализуйте программу, выводящую в консоль количество использований каждого из уникальных слов
* во введенной пользователем строке.
Expand All @@ -8,6 +14,71 @@
* <a href="https://github.com/KFalcon2022/practical-tasks/tree/master/src/com/walking/lesson30_regex/task3">...</a>.
*/
public class Main {
public static final String WORDS_REGEX = "[a-z-\\s]+";
public static final String COMPLEX_WORD_REGEX = "[a-z][a-z-]+[a-z]";
public static final String WORD_REGEX = "[a-z]+";

public static void main(String[] args) {
String words = getStringFromUser();

if (!words.matches(WORDS_REGEX)) {
throw new RegexValidationException(words, WORDS_REGEX);
}

Map<String, Integer> wordOccurrences = getWordOccurrences(words);
printWordOccurrences(wordOccurrences);
}

public static String getStringFromUser() {
System.out.println("Введите строку, содержащую слова, разделенные пробелом:");

Scanner scanner = new Scanner(System.in);

String words = scanner.nextLine()
.trim()
.toLowerCase();

scanner.close();

return words;
}

private static Map<String, Integer> getWordOccurrences(String words) {
Map<String, Integer> wordOccurrences = new HashMap<>();
Integer currentWordOccurrence;

for (String word : words.split("\\s+")) {
validateWord(word);
currentWordOccurrence = wordOccurrences.getOrDefault(word, 0);
wordOccurrences.put(word, ++currentWordOccurrence);
}

return wordOccurrences;
}

private static void validateWord(String word) {
if (word.contains("-")) {
if (!word.matches(COMPLEX_WORD_REGEX)) {
throw new RegexValidationException(word, COMPLEX_WORD_REGEX);
}

for (String wordPart : word.split("-")) {
validateSimpleWord(wordPart);
}
} else {
validateSimpleWord(word);
}
}

private static void validateSimpleWord(String word) {
if (!word.matches(WORD_REGEX)) {
throw new RegexValidationException(word, WORD_REGEX);
}
}

private static void printWordOccurrences(Map<String, Integer> wordOccurrences) {
for (Map.Entry<String, Integer> stringIntegerEntry : wordOccurrences.entrySet()) {
System.out.printf("%s - %s\n", stringIntegerEntry.getKey(), stringIntegerEntry.getValue());
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.walking.lesson43_map.task1.exception;

public class RegexValidationException extends RuntimeException {
public RegexValidationException(String str, String regex) {
super("%s not matches to '%s'".formatted(str, regex));
}
}
46 changes: 46 additions & 0 deletions src/com/walking/lesson43_map/task2/Main.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package com.walking.lesson43_map.task2;

import com.walking.lesson43_map.task2.model.Car;
import com.walking.lesson43_map.task2.service.CarService;

import java.util.Scanner;

/**
* Реализуйте задачу
* <a href="https://github.com/KFalcon2022/practical-tasks/tree/master/src/com/walking/lesson19_object_methods">...</a>,
Expand All @@ -8,5 +13,46 @@
*/
public class Main {
public static void main(String[] args) {
CarService carService = new CarService(initCars());

Car desiredCar = createCar();
Car foundCar = carService.findCar(desiredCar);

System.out.println(foundCar);
}

private static Car createCar() {
Scanner scanner = new Scanner(System.in);

System.out.println("Enter a car's number");
String number = scanner.nextLine();

System.out.println("Enter a car's color");
String color = scanner.nextLine();

System.out.println("Enter a car's year");
int year = scanner.nextInt();

System.out.println("Enter a actuality of technical inspection");
boolean actualTechnicalInspection = scanner.nextBoolean();

scanner.close();

return new Car(number, year, color, actualTechnicalInspection);
}

private static Car[] initCars() {
Car car1 = new Car("RR-111-RR", 2015, "yellow", true);
Car car2 = new Car("RR-222-RR", 2016, "yellow", true);
Car car3 = new Car("RR-333-RR", 2017, "yellow", true);
Car car4 = new Car("RR-444-RR", 2018, "yellow", true);
Car car5 = new Car("RR-555-RR", 2018, "yellow", true);
Car car6 = new Car("RR-777-RR", 2015, "yellow", true);
Car car7 = new Car("RR-777-RR", 2018, "yellow", true);
Car car8 = new Car("RR-888-RR", 2018, "yellow", true);
Car car9 = new Car("RR-999-RR", 2018, "yellow", true);
Car car10 = new Car("RR-000-RR", 2018, "yellow", true);

return new Car[]{car1, car2, car3, car4, car5, car6, car7, car8, car9, car10};
}
}
45 changes: 45 additions & 0 deletions src/com/walking/lesson43_map/task2/model/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.walking.lesson43_map.task2.model;


public class Car {
private final CarIdentifier identifier;

private String color;
private boolean actualTechnicalInspection;

public Car(String number, int year, String color, boolean actualTechnicalInspection) {
this(new CarIdentifier(number, year), color, actualTechnicalInspection);
}

public Car(CarIdentifier identifier, String color, boolean actualTechnicalInspection) {
this.identifier = identifier;
this.color = color;
this.actualTechnicalInspection = actualTechnicalInspection;
}

public CarIdentifier getIdentifier() {
return identifier;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public boolean isActualTechnicalInspection() {
return actualTechnicalInspection;
}

public void setActualTechnicalInspection(boolean actualTechnicalInspection) {
this.actualTechnicalInspection = actualTechnicalInspection;
}

@Override
public String toString() {
return "number: %s | year: %d | color: %s | actualTechnicalInspection: %s".formatted(identifier.getNumber(),
identifier.getYear(), color, actualTechnicalInspection ? "actual" : "not actual");
}
}
44 changes: 44 additions & 0 deletions src/com/walking/lesson43_map/task2/model/CarIdentifier.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.walking.lesson43_map.task2.model;

import java.util.Objects;

public class CarIdentifier {
private final String number;
private final int year;

public CarIdentifier(String number, int year) {
this.number = number;
this.year = year;
}

public String getNumber() {
return number;
}

public int getYear() {
return year;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}

if (o == null || !getClass().equals(o.getClass())) {
return false;
}

CarIdentifier identifier = (CarIdentifier) o;

return year == identifier.year && Objects.equals(number, identifier.number);
}

@Override
public int hashCode() {
int hashcode = number.hashCode();
hashcode += 31 * year;

return hashcode;
}
}
21 changes: 21 additions & 0 deletions src/com/walking/lesson43_map/task2/service/CarService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.walking.lesson43_map.task2.service;

import com.walking.lesson43_map.task2.model.Car;
import com.walking.lesson43_map.task2.model.CarIdentifier;

import java.util.HashMap;
import java.util.Map;

public class CarService {
private final Map<CarIdentifier, Car> cars = new HashMap<>();

public CarService(Car[] cars) {
for (Car car : cars) {
this.cars.put(car.getIdentifier(), car);
}
}

public Car findCar(Car car) {
return cars.getOrDefault(car.getIdentifier(), null);
}
}