Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Дана непустая последовательность символов, требуется построить и напечатать множество, элементами которого являются
- // встречающиеся в последовательности знаки арифметических операций и нечётные цифры.
- package com.company;
- import java.io.File;
- import java.io.PrintWriter;
- import java.util.HashSet;
- import java.util.Scanner;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- class ExceptionFileCannotBeReadOrEmpty extends Exception {
- }
- class ExceptionEmptyStringFound extends Exception {
- }
- public class Main {
- private static Scanner scConsole;
- private static final String MES_TASK = "Дана непустая последовательность символов, требуется построить и напечатать " +
- "множество, элементами которого являются встречающиеся в последовательности знаки арифметических операций и нечётные цифры.";
- private static final String ERROR_FILE_NOT_FOUND = "Файл не найден.";
- private static final String FORMAT_INPUT_OF_PATH = "Пожалуйста, введите путь к файлу %s: ";
- private static final String MES_ASK_INPUT_METHOD = "\nОткуда брать данные?\n\t1 - из файла\n\t2 - ввести вручную\n";
- private static final String MES_ASK_AGAIN_INPUT_METHOD = "\t\"1\" - повторить попытку.\n\t\"2\" - ввести данные из консоли.\n";
- private static final String ERROR_FILE_CANNOT_BE_READ_OR_IS_EMPTY = "Файл не может быть прочитан или пуст.";
- private static final String MES_ASK_OUTPUT_TO_FILE = "Хотите вывести ответ в файл?\n\t1 - да\n\t2 - нет\n";
- private static final String ERROR_FILE_CANNOT_BE_CREATED_OT_OPENED = "Файл не может быть создан или открыт. Повторите попытку:\n";
- private static final String ERROR_CHOICE_IS_INCORRECT = "\tНадо ввести \"1\" или \"2\".\n\tПовторите попытку: ";
- private static final String ERROR_EMPTY_STRING = "Обнаружена пустая строка. ";
- private static final String MES_NO_APPROPRIATE_CHARS_FOUND = "Нет ни одного подходящего под описание символа";
- private static String choose(String sChoice1, String sChoice2, String sQuestion) {
- short nChoice = 2;
- boolean bIsIncorrect;
- String sAnswer;
- System.out.println(sQuestion + "\tВаш выбор: ");
- do {
- bIsIncorrect = false;
- try {
- nChoice = Short.parseShort(scConsole.nextLine());
- } catch (NumberFormatException e) {
- bIsIncorrect = true;
- }
- if (!bIsIncorrect && !(nChoice == 1) && !(nChoice == 2)) {
- bIsIncorrect = true;
- }
- if (bIsIncorrect) {
- System.out.println(ERROR_CHOICE_IS_INCORRECT);
- }
- } while (bIsIncorrect);
- sAnswer = nChoice == 1 ? sChoice1 : sChoice2;
- return sAnswer;
- }
- private static String inputPathToFile(boolean bIsInput) {
- String sPath;
- System.out.printf(FORMAT_INPUT_OF_PATH, bIsInput ? "ввода" : "вывода");
- sPath = scConsole.nextLine();
- return sPath;
- }
- private static String readStringFromFile(String sPathToFile) throws java.io.FileNotFoundException, ExceptionFileCannotBeReadOrEmpty, ExceptionEmptyStringFound {
- Scanner scFileInput = new Scanner(new File(sPathToFile));
- String sInput;
- if (scFileInput.hasNextLine()) {
- sInput = scFileInput.nextLine();
- if (sInput.equals("")) {
- throw new ExceptionEmptyStringFound();
- }
- } else {
- throw new ExceptionFileCannotBeReadOrEmpty();
- }
- scFileInput.close();
- System.out.println("На входе:\n" + sInput);
- return sInput;
- }
- private static String readStringFromConsole() {
- String sInput = "";
- System.out.println("Введите строку:");
- while (sInput.equals("")) {
- sInput = scConsole.nextLine();
- if (sInput.equals("")) {
- System.out.println(ERROR_EMPTY_STRING + "Повторите попытку");
- }
- }
- return sInput;
- }
- private static String getInput() {
- String sInput = "";
- boolean bInputIsNotDone = true;
- String sInputMethod = choose("FromFile", "FromConsole", MES_ASK_INPUT_METHOD);
- do {
- switch (sInputMethod) {
- case "FromFile" -> {
- String sPathToFile = inputPathToFile(true);
- try {
- sInput = readStringFromFile(sPathToFile);
- bInputIsNotDone = false;
- } catch (java.io.FileNotFoundException e) {
- System.out.println(ERROR_FILE_NOT_FOUND);
- } catch (ExceptionFileCannotBeReadOrEmpty e) {
- System.out.println(ERROR_FILE_CANNOT_BE_READ_OR_IS_EMPTY);
- } catch (ExceptionEmptyStringFound e) {
- System.out.println(ERROR_EMPTY_STRING);
- }
- if (bInputIsNotDone) {
- sInputMethod = choose("FromFile", "FromConsole", MES_ASK_AGAIN_INPUT_METHOD);
- }
- }
- case "FromConsole" -> {
- sInput = readStringFromConsole();
- bInputIsNotDone = false;
- }
- }
- } while (bInputIsNotDone);
- return sInput;
- }
- private static HashSet<Character> computeAns(String sInput) throws java.lang.IllegalStateException {
- HashSet<Character> setSet = new HashSet<>();
- Pattern pattern = Pattern.compile("[13579+*/-]");
- Matcher matcher = pattern.matcher(sInput);
- while (matcher.find()) {
- setSet.add(matcher.group().charAt(0));
- }
- return setSet;
- }
- private static void outputToFile(HashSet<Character> setSet, String sPathToFile) {
- boolean bOutputNotReady = true;
- do {
- try {
- PrintWriter fOutput = new PrintWriter(sPathToFile);
- if (setSet.size() > 0) {
- for (int i = 0; i < setSet.size() - 1; i++) {
- fOutput.print(setSet.toArray()[i] + " ");
- }
- fOutput.print(setSet.toArray()[setSet.size()]);
- } else {
- fOutput.print(MES_NO_APPROPRIATE_CHARS_FOUND);
- }
- fOutput.close();
- bOutputNotReady = false;
- } catch (Exception e) {
- System.out.print(ERROR_FILE_CANNOT_BE_CREATED_OT_OPENED);
- String sShouldOutputInfoToFile = choose("Output to file", "Don't output to file", MES_ASK_OUTPUT_TO_FILE);
- if (sShouldOutputInfoToFile.equals("Output to file")) {
- sPathToFile = inputPathToFile(false);
- } else {
- bOutputNotReady = false;
- }
- }
- } while (bOutputNotReady);
- }
- private static void outputAnswer(HashSet<Character> setSet) {
- System.out.println("Ответ: ");
- if (setSet.size() > 0) {
- for (int i = 0; i < setSet.size() - 1; i++) {
- System.out.print(setSet.toArray()[i] + ", ");
- }
- System.out.println(setSet.toArray()[setSet.size() - 1]);
- } else {
- System.out.println(MES_NO_APPROPRIATE_CHARS_FOUND);
- }
- String sShouldOutputInfoToFile = choose("Output to file", "Don't output to file", MES_ASK_OUTPUT_TO_FILE);
- if (sShouldOutputInfoToFile.equals("Output to file")) {
- String sPathToFile = inputPathToFile(false);
- outputToFile(setSet, sPathToFile);
- }
- }
- public static void main(String[] args) {
- scConsole = new Scanner(System.in);
- HashSet<Character> setSet = new HashSet<>();
- System.out.println(MES_TASK);
- // Путь к моему файлу ввода: /Users/sasha/Documents/___Университет/ОАиП/Пз/Лабы/блок 3/input.txt
- // Путь к моему файлу вывода: /Users/sasha/Documents/___Университет/ОАиП/Пз/Лабы/блок 3/output.txt
- String sInput = getInput();
- setSet = computeAns(sInput);
- outputAnswer(setSet);
- scConsole.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment