Advertisement
ksyshshot

Lab.3.2

Nov 17th, 2022
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.07 KB | Source Code | 0 0
  1. import java.util.HashSet;
  2. import java.util.Scanner;
  3. import java.io.*;
  4.  
  5. public class Main {
  6.  
  7.     static Scanner scan = new Scanner(System.in);
  8.  
  9.     public static void main(String[] args) {
  10.         writeTask();
  11.         System.out.print("Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ");
  12.         int choice = chooseInputOutputMethod();
  13.         String sequence = getCharacterSequence(choice);
  14.         HashSet<Character> answer = getSearchCharactersSet(sequence);
  15.         System.out.print("Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ");
  16.         choice = chooseInputOutputMethod();
  17.         outputResult(choice, answer);
  18.         scan.close();
  19.     }
  20.  
  21.     public static void writeTask() {
  22.         System.out.println("Данная программа строит и печатает множество, элементами которого\nявляются встречающиеся в последовательности скобки: () [] {} и цифры");
  23.     }
  24.  
  25.     public static String takeCharacterSequenceFromConsole() {
  26.         String sequence = "";
  27.         boolean isNotCorrect;
  28.         do {
  29.             isNotCorrect = false;
  30.             System.out.print("Введите непустую последовательность: ");
  31.             try {
  32.                 sequence = scan.nextLine();
  33.             } catch (Exception e) {
  34.                 isNotCorrect = true;
  35.                 System.out.println("Произошла ошибка ввода. Повторите попытку...");
  36.             }
  37.             if ((!isNotCorrect) && (sequence == "")) {
  38.                 isNotCorrect = true;
  39.                 System.out.println("Введённая последовательность должна быть непустой!");
  40.             }
  41.         } while (isNotCorrect);
  42.         System.out.println("Полученная строка: " + sequence);
  43.         return sequence;
  44.     }
  45.  
  46.     public static String takePathToFile() {
  47.         String path;
  48.         boolean isNotCorrect;
  49.         do {
  50.             isNotCorrect = false;
  51.             System.out.print("Введите путь к файлу: ");
  52.             path = scan.nextLine();
  53.             File file = new File(path);
  54.             if (!file.exists()) {
  55.                 System.out.println("Не удалось найти файл по заданному пути. Повторите попытку...");
  56.                 isNotCorrect = true;
  57.             }
  58.         } while (isNotCorrect);
  59.         return path;
  60.     }
  61.  
  62.     public static String takeCharacterSequenceFromFile() {
  63.         System.out.println("Требуется файл для чтения строки.");
  64.         String path = takePathToFile();
  65.         boolean isNotCorrect;
  66.         String sequence = "";
  67.         do {
  68.             isNotCorrect = false;
  69.             try (Scanner fileReader = new Scanner(new File (path))) {
  70.                 sequence = fileReader.nextLine();
  71.             } catch (IOException e) {
  72.                 isNotCorrect = true;
  73.                 System.out.print("Произошла ошибка доступа к файлу. Заново введите путь к файлу: ");
  74.                 path = takePathToFile();
  75.             }
  76.             if ((!isNotCorrect) && (sequence == "")) {
  77.                 isNotCorrect = true;
  78.                 System.out.println("Введённая последовательность должна быть непустой!");
  79.             }
  80.         } while (isNotCorrect);
  81.         System.out.println("Полученная строка: " + sequence);
  82.         return sequence;
  83.     }
  84.  
  85.     public static HashSet<Character> getSearchCharactersSet(String sequence) {
  86.         HashSet<Character> searchCharactersSet = new HashSet<>();
  87.         searchCharactersSet.add('(');
  88.         searchCharactersSet.add(')');
  89.         searchCharactersSet.add('{');
  90.         searchCharactersSet.add('}');
  91.         searchCharactersSet.add('[');
  92.         searchCharactersSet.add(']');
  93.         for (int i = '0'; i <= '9'; i++) {
  94.             searchCharactersSet.add((char) i);
  95.         }
  96.         HashSet<Character> searchSet = new HashSet<>();
  97.         for (int i = 0; i < sequence.length(); i++) {
  98.             if (searchCharactersSet.contains(sequence.charAt(i))) {
  99.                 searchSet.add(sequence.charAt(i));
  100.             }
  101.         }
  102.         return searchSet;
  103.     }
  104.  
  105.     public static void outputSetInConsole(HashSet<Character> charactersSet) {
  106.         if (charactersSet != null) {
  107.             System.out.println(charactersSet);
  108.         } else {
  109.             System.out.println("В строке не было найдено скобок и цифр.");
  110.         }
  111.     }
  112.  
  113.     public static void outputSetInFile(HashSet<Character> charactersSet) {
  114.         System.out.println("Требуется файл для записи искомого множества.");
  115.         String path = takePathToFile();
  116.         boolean isNotCorrect;
  117.         do {
  118.             isNotCorrect = false;
  119.             try (FileWriter fileWriter = new FileWriter(new File (path))) {
  120.                 if (charactersSet != null) {
  121.                     fileWriter.write(charactersSet.toString());
  122.                 } else {
  123.                     fileWriter.write("В строке не было найдено скобок и цифр.");
  124.                 }
  125.             } catch (IOException e) {
  126.                 isNotCorrect = true;
  127.                 System.out.println("Произошла ошибка доступа к файлу. Заново введите путь к файлу: ");
  128.                 path = takePathToFile();
  129.             }
  130.         } while (isNotCorrect);
  131.         System.out.println("Множество записано в файл!");
  132.     }
  133.  
  134.     public static int chooseInputOutputMethod() {
  135.         boolean isNotCorrect;
  136.         int choice = 0;
  137.         do {
  138.             isNotCorrect = false;
  139.             try {
  140.                 choice = Integer.parseInt(scan.nextLine());
  141.             } catch (NumberFormatException e) {
  142.                 System.out.println("Число введено некорректно. Повторите попытку...");
  143.                 isNotCorrect = true;
  144.             }
  145.             if ((!isNotCorrect) && (choice != 1) && (choice != 2)) {
  146.                 System.out.println("Введите либо 1, либо 2. Ваш выбор: ");
  147.                 isNotCorrect = true;
  148.             }
  149.         } while (isNotCorrect);
  150.         return choice;
  151.     }
  152.  
  153.     public static String getCharacterSequence(int choice) {
  154.         String sequence = "";
  155.         if (choice == 1) {
  156.             sequence = takeCharacterSequenceFromConsole();
  157.         } else {
  158.             sequence = takeCharacterSequenceFromFile();
  159.         }
  160.         return sequence;
  161.     }
  162.  
  163.     public static void outputResult(int choice, HashSet<Character> answer) {
  164.         if (choice == 1) {
  165.             outputSetInConsole(answer);
  166.         } else {
  167.             outputSetInFile(answer);
  168.         }
  169.     }
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement