Advertisement
Ewerlost

3_1Java

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