Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- public class Main {
- private static final Scanner scan = new Scanner(System.in);
- private static void printCondition() {
- System.out.println("Данная программа определит номер позиции k-го вхождения строки st2 в строку st1. Если такого нет, возвратит -1.");
- }
- private static int readNum(int min, int max) {
- int n;
- boolean isIncorrect;
- n = 0;
- do {
- isIncorrect = false;
- try {
- n = Integer.parseInt(scan.nextLine());
- }
- catch (Exception err) {
- System.out.println("Вы ввели некорректные данные. Попробуйте снова");
- isIncorrect = true;
- }
- if (!isIncorrect && (n < min || n > max)) {
- System.out.println("Введено значение не входящее в диапазон допустимых значений");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return n;
- }
- private static String[] inputStr() {
- int choice;
- String[] str = new String[3];
- System.out.println("Выберите вариант ввода:");
- System.out.println("1.Ввод из консоли");
- System.out.println("2.Ввод из файла");
- choice = readNum(1, 2);
- if (choice == 1) {
- str= inputStrFromConsole();
- }
- else {
- str = inputStrFromFile();
- }
- return str;
- }
- private static String[] inputStrFromConsole() {
- final int MIN_NUMBER = 1, MAX_NUMBER = 10;
- int i, k;
- String[] str = new String[3];
- k = 0;
- i = 0;
- System.out.println("Введите число k");
- k = readNum(MIN_NUMBER, MAX_NUMBER);
- str[0] = Integer.toString(k);
- for(i = 1; i < 2; i++)
- do {
- System.out.println("Введите строку" + i);
- str[i] = scan.nextLine();
- } while (str[i].isBlank());
- return str;
- }
- private static String[] inputStrFromFile() {
- String pathFile;
- String[] str = new String[3];
- boolean isInputFromFileSuccessfully;
- System.out.println("Данные в файле должны содержать текст");
- do {
- System.out.print("Введите путь к файлу и его имя с его расширением:");
- pathFile = scan.nextLine();
- isInputFromFileSuccessfully = checkFile(pathFile);
- } while(!isInputFromFileSuccessfully);
- str = readFile(pathFile);
- return str;
- }
- private static boolean checkFile(String path) {
- final int MIN_NUMBER = 1, MAX_NUMBER = 10;
- String bufText, checkText;
- File checkFile;
- int k;
- boolean isFileCorrect;
- StringBuilder builderOfText;
- checkFile = new File(path);
- builderOfText = new StringBuilder();
- isFileCorrect = true;
- k = 0;
- if (!checkFile.isFile()) {
- System.out.println("Файл не найден! Пожалуйста проверьте существование файла и введите путь заново");
- isFileCorrect = false;
- }
- if (isFileCorrect && !checkFile.canRead() ) {
- System.out.println("Файл не может быть прочитан! Пожалуйста проверьте файл и введите путь заново");
- isFileCorrect = false;
- }
- if (isFileCorrect) {
- try (Scanner fileScan = new Scanner(checkFile)) {
- try {
- k = fileScan.nextInt();
- } catch (Exception err) {
- System.out.println("K в неправильном формате");
- isFileCorrect = false;
- }
- if (k < MIN_NUMBER || k > MAX_NUMBER) {
- System.out.println("В файле число K выходит за возможные пределы.");
- isFileCorrect = false;
- }
- if (isFileCorrect) {
- while (fileScan.hasNextLine()) {
- bufText = fileScan.nextLine();
- builderOfText.append(bufText);
- }
- checkText = builderOfText.toString();
- if (checkText.isBlank()) {
- isFileCorrect = false;
- System.out.println("Файл пустой! Внесите изменения в файл и повторите попытку!");
- }
- }
- }
- catch (FileNotFoundException e) {
- System.out.println("Файл по данному пути не существует! Пожалуйста проверьте файл и введите путь заново");
- isFileCorrect = false;
- }
- }
- return isFileCorrect;
- }
- private static String[] readFile(String path) {
- String[] str = new String[3];
- File file;
- StringBuilder builderOfText;
- file = new File(path);
- try (Scanner fileScan = new Scanner(file)) {
- str[0] = fileScan.nextLine();
- str[1] = fileScan.nextLine();
- str[2] = fileScan.nextLine();
- }
- catch (FileNotFoundException e) {
- System.out.println("Файл по данному пути не существует. Пожалуйста проверьте файл и введите путь заново");
- }
- return str;
- }
- private static int findPosition(String[] str) {
- boolean isSubstringCorrect;
- int i, j, position, quantity, k;
- quantity = 0;
- position = 0;
- i = 0;
- k = 0;
- k = Integer.parseInt(str[0]);
- while(i + str[2].length() <= str[1].length() && quantity < k) {
- isSubstringCorrect = true;
- for (j = 0; j < str[2].length(); j++)
- if (str[1].charAt(i + j) != str[2].charAt(j))
- isSubstringCorrect = false;
- if (isSubstringCorrect) {
- position = i + 1;
- quantity++;
- }
- i++;
- }
- if (quantity < k)
- position = -1;
- return position;
- }
- private static void outputAnswer(int ans) {
- int choice;
- System.out.println("Выберите вариант вывода:");
- System.out.println("1.Вывод в консоль");
- System.out.println("2.Вывод в файл");
- choice = readNum(1, 2);
- if (choice == 1) {
- outputAnswerToConsole(ans);
- }
- else {
- outputAnswerToFile(ans);
- }
- }
- private static void outputAnswerToConsole(int answer) {
- System.out.print(answer);
- }
- private static void outputAnswerToFile(int answer) {
- String path;
- boolean isFileIncorrect;
- System.out.println("Для вывода введите путь к файлу.");
- System.out.println("Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)");
- do {
- isFileIncorrect = false;
- System.out.print("Введите путь к файлу и его имя c расширением: ");
- path = scan.nextLine();
- File outputFile = new File(path);
- try {
- if (outputFile.isFile()) {
- if (outputFile.canWrite()) {
- try (FileWriter writer = new FileWriter(outputFile)) {
- writer.write(answer);
- }
- }
- else {
- System.out.println("Файл доступен только для чтения!");
- isFileIncorrect = true;
- }
- }
- else {
- outputFile.createNewFile();
- try (FileWriter writer = new FileWriter(outputFile)) {
- writer.write(answer);
- }
- }
- }
- catch (IOException e) {
- System.out.println("Не удалось вывести в файл!");
- isFileIncorrect = true;
- }
- } while (isFileIncorrect);
- System.out.println("Вывод данных... успешно!");
- scan.close();
- }
- public static void main(String[] args) {
- String[] str = new String[3];
- int answer;
- printCondition();
- str = inputStr();
- answer = findPosition(str);
- outputAnswer(answer);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement