Advertisement
Ewerlost

Lab3.1Java

Nov 20th, 2023 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.16 KB | None | 0 0
  1. package com.company;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.util.HashSet;
  8. import java.util.Scanner;
  9.  
  10. public class Main {
  11.     private static final Scanner scan = new Scanner(System.in);
  12.  
  13.     private static void printCondition() {
  14.         System.out.println("Данная программа определит номер позиции k-го вхождения строки st2 в строку st1. Если такого нет, возвратит -1.");
  15.     }
  16.  
  17.     private static int readNum(int min, int max) {
  18.         int n;
  19.         boolean isIncorrect;
  20.         n = 0;
  21.         do {
  22.             isIncorrect = false;
  23.             try {
  24.                 n = Integer.parseInt(scan.nextLine());
  25.             }
  26.             catch (Exception err) {
  27.                 System.out.println("Вы ввели некорректные данные. Попробуйте снова");
  28.                 isIncorrect = true;
  29.             }
  30.             if (!isIncorrect && (n < min || n > max)) {
  31.                 System.out.println("Введено значение не входящее в диапазон допустимых значений");
  32.                 isIncorrect = true;
  33.             }
  34.         } while (isIncorrect);
  35.         return n;
  36.     }
  37.  
  38.     private static String[] inputStr() {
  39.         int choice;
  40.         String[] str = new String[3];
  41.  
  42.         System.out.println("Выберите вариант ввода:");
  43.         System.out.println("1.Ввод из консоли");
  44.         System.out.println("2.Ввод из файла");
  45.         choice = readNum(1, 2);
  46.  
  47.         if (choice == 1) {
  48.             str= inputStrFromConsole();
  49.         }
  50.         else {
  51.             str = inputStrFromFile();
  52.         }
  53.  
  54.         return str;
  55.     }
  56.  
  57.     private static String[] inputStrFromConsole() {
  58.         int i;
  59.         String[] str = new String[3];
  60.  
  61.         i = 0;
  62.  
  63.         System.out.println("Введите число k, и 2 строки:");
  64.  
  65.         for(i = 0; i < 3; i++)
  66.             do {
  67.                 str[i] = scan.nextLine();
  68.             } while (str[i].isBlank());
  69.  
  70.         return str;
  71.     }
  72.  
  73.     private static String[] inputStrFromFile() {
  74.         String pathFile;
  75.         String[] str = new String[3];
  76.         boolean isInputFromFileSuccessfully;
  77.  
  78.         System.out.println("Данные в файле должны содержать текст");
  79.         do {
  80.             System.out.print("Введите путь к файлу и его имя с его расширением:");
  81.             pathFile = scan.nextLine();
  82.             isInputFromFileSuccessfully = checkFile(pathFile);
  83.         } while(!isInputFromFileSuccessfully);
  84.  
  85.         str = readFile(pathFile);
  86.  
  87.         return str;
  88.     }
  89.  
  90.     private static boolean checkFile(String path) {
  91.         final int MIN_NUMBER = 1, MAX_NUMBER = 10;
  92.         String bufText, checkText;
  93.         File checkFile;
  94.         int k;
  95.         boolean isFileCorrect;
  96.         StringBuilder builderOfText;
  97.  
  98.         checkFile = new File(path);
  99.         builderOfText = new StringBuilder();
  100.         isFileCorrect = true;
  101.         k = 0;
  102.  
  103.         if (!checkFile.isFile()) {
  104.             System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
  105.             isFileCorrect = false;
  106.         }
  107.         if (isFileCorrect && !checkFile.canRead() ) {
  108.             System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
  109.             isFileCorrect = false;
  110.         }
  111.         if (isFileCorrect) {
  112.             try (Scanner fileScan = new Scanner(checkFile)) {
  113.  
  114.                 try {
  115.                     k = fileScan.nextInt();
  116.                 } catch (Exception err) {
  117.                     System.out.println("K в неправильном формате");
  118.                     isFileCorrect = false;
  119.                 }
  120.                 if (k < MIN_NUMBER || k > MAX_NUMBER) {
  121.                     System.out.println("В файле число K выходит за возможные пределы.");
  122.                     isFileCorrect = false;
  123.                 }
  124.                 if (isFileCorrect) {
  125.                     while (fileScan.hasNextLine()) {
  126.                         bufText = fileScan.nextLine();
  127.                         builderOfText.append(bufText);
  128.                     }
  129.  
  130.                     checkText = builderOfText.toString();
  131.  
  132.                     if (checkText.isBlank()) {
  133.                         isFileCorrect = false;
  134.                         System.out.println("Файл пустой! Внесите изменения в файл и повторите попытку!");
  135.                     }
  136.                 }
  137.             }
  138.             catch (FileNotFoundException e) {
  139.                 System.out.println("Файл по данному пути не существует! Пожалуйста проверьте файл и введите путь заново");
  140.                 isFileCorrect = false;
  141.             }
  142.         }
  143.         return isFileCorrect;
  144.     }
  145.  
  146.     private static String[] readFile(String path) {
  147.         String[] str = new String[3];
  148.         File file;
  149.         StringBuilder builderOfText;
  150.  
  151.         file = new File(path);
  152.         try (Scanner fileScan = new Scanner(file)) {
  153.             str[0] = fileScan.nextLine();
  154.             str[1] = fileScan.nextLine();
  155.             str[2] = fileScan.nextLine();
  156.         }
  157.         catch (FileNotFoundException e) {
  158.             System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
  159.         }
  160.  
  161.         return str;
  162.     }
  163.  
  164.     private static int findPosition(String[] str) {
  165.         boolean isSubstringCorrect;
  166.         int i, j, position, quantity, k;
  167.  
  168.         quantity = 0;
  169.         position = 0;
  170.         i = 0;
  171.         k = 0;
  172.  
  173.         k = Integer.parseInt(str[0]);
  174.         while(i + str[2].length() <= str[1].length() && quantity < k) {
  175.             isSubstringCorrect = true;
  176.  
  177.             for (j = 0; j < str[2].length(); j++)
  178.                 if (str[1].charAt(i + j) != str[2].charAt(j))
  179.                     isSubstringCorrect = false;
  180.             if (isSubstringCorrect) {
  181.                 position = i + 1;
  182.                 quantity++;
  183.             }
  184.             i++;
  185.         }
  186.  
  187.         if (quantity < k)
  188.             position = -1;
  189.         return position;
  190.     }
  191.  
  192.     private static void outputAnswer(int ans) {
  193.         int choice;
  194.  
  195.         System.out.println("Выберите вариант вывода:");
  196.         System.out.println("1.Вывод в консоль");
  197.         System.out.println("2.Вывод в файл");
  198.         choice = readNum(1, 2);
  199.         scan.close();
  200.  
  201.         if (choice == 1) {
  202.             outputAnswerToConsole(ans);
  203.         }
  204.         else {
  205.             outputAnswerToFile(ans);
  206.         }
  207.     }
  208.  
  209.     private static void outputAnswerToConsole(int answer) {
  210.         System.out.print(answer);
  211.     }
  212.  
  213.     private static void outputAnswerToFile(int answer) {
  214.         String path;
  215.         boolean isFileIncorrect;
  216.  
  217.         System.out.println("Для вывода введите путь к файлу.");
  218.         System.out.println("Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)");
  219.         do {
  220.             isFileIncorrect = false;
  221.             System.out.print("Введите путь к файлу и его имя c расширением: ");
  222.             path = scan.nextLine();
  223.             File outputFile = new File(path);
  224.             try {
  225.                 if (outputFile.isFile()) {
  226.                     if (outputFile.canWrite()) {
  227.                         try (FileWriter writer = new FileWriter(outputFile)) {
  228.                             writer.write(answer);
  229.                         }
  230.                     }
  231.                     else {
  232.                         System.out.println("Файл доступен только для чтения!");
  233.                         isFileIncorrect = true;
  234.                     }
  235.                 }
  236.                 else {
  237.                     outputFile.createNewFile();
  238.                     try (FileWriter writer = new FileWriter(outputFile)) {
  239.                         writer.write(answer);
  240.                     }
  241.                 }
  242.             }
  243.             catch (IOException e) {
  244.                 System.out.println("Не удалось вывести в файл!");
  245.                 isFileIncorrect = true;
  246.             }
  247.         } while (isFileIncorrect);
  248.         System.out.println("Вывод данных... успешно!");
  249.     }
  250.  
  251.     public static void main(String[] args) {
  252.         String[] str = new String[3];
  253.         int answer;
  254.         printCondition();
  255.         str = inputStr();
  256.         answer = findPosition(str);
  257.         outputAnswer(answer);
  258.     }
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement