Advertisement
ksyshshot

Lab.3.1

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