Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //luodaan ohjelma, joka kysyy käyttäjältä merkkijonoa ja etsii siitä käyttäjän antaman toisen merkkijonon esiintymiä
- import java.util.*;
- public class SubstringFinderZ {
- public static void main(String[] args) {
- String VIRHE = "Error!";
- char JATKETAAN = 'y';
- char LOPETETAAN = 'n';
- char JOKERI = '*';
- boolean lopetus = false;
- boolean alkupaasta = false;
- boolean lopusta = false;
- boolean eiTahtea = true;
- String siistiOsamjono = "";
- String osamerkkijono = "";
- //alustetaan muuttujat, jotka näkyvät koko main-operaatioon
- System.out.println("Hello! I find substrings.");
- //tervehditään käyttäjää
- while(!lopetus) {
- boolean tulikoVirhe = true;
- boolean osaMjonoOK = false;
- System.out.println("Please, enter a string:");
- String merkkijono = In.readString();
- //luetaan käyttäjältä merkkijono, jota tarkastellaan
- while(!osaMjonoOK) {
- siistiOsamjono = ""; //tyhjennetään siistiOsamjono, jos se ei ole jo tyhjä.
- System.out.println("Please, enter a substring:");
- osamerkkijono = In.readString();
- //luetaan käyttäjältä osamerkkijono, jonka esiintymiä pidemmässä mjonossa tarkastellaan
- char ekaMerkki = osamerkkijono.charAt(0);
- char vikaMerkki = osamerkkijono.charAt(osamerkkijono.length() - 1);
- //tarkastetaan, onko keskellä osamerkkijonoa eksynyt tähti
- boolean eksynytTahti = false;
- for (int i = 1; i < osamerkkijono.length() - 1; i ++) {
- if (osamerkkijono.charAt(i) == JOKERI) {
- eksynytTahti = true;
- }
- }
- //tarkastetaan, onko keskellä merkkijonoa eksynyt tähti
- for (int i = 1; i < merkkijono.length() - 1; i ++) {
- if (merkkijono.charAt(i) == JOKERI) {
- eksynytTahti = true;
- }
- }
- if (osamerkkijono.length() > merkkijono.length() || osamerkkijono.equals("*")
- || (ekaMerkki == (JOKERI) && vikaMerkki == (JOKERI))
- || eksynytTahti) {
- System.out.println(VIRHE);
- //tarkastetaan, onko syöte oikeanlainen
- }
- if (ekaMerkki == (JOKERI)) {
- lopusta = true;
- eiTahtea = false;
- alkupaasta = false;
- for (int i = 1; i < osamerkkijono.length(); i++) {
- siistiOsamjono += osamerkkijono.charAt(i);
- }
- osaMjonoOK = true;
- } else if (vikaMerkki == (JOKERI)) {
- alkupaasta = true;
- eiTahtea = false;
- lopusta = false;
- for (int i = 0; i < osamerkkijono.length() - 1; i++) {
- siistiOsamjono += osamerkkijono.charAt(i);
- }
- osaMjonoOK = true;
- //tarkastellaan, esiintyykö tähteä, ja jos esiintyy, siistitään se pois osamjonosta
- } else {
- osaMjonoOK = true;
- eiTahtea = true;
- alkupaasta = false;
- lopusta = false;
- siistiOsamjono = osamerkkijono;
- }
- //tarkastetaan onko osamerkkijono OK, jos ei, kysytään uutta ja jos on, jatketaan
- }
- int kierroslaskuri = 0;
- int alkuindeksi = 0;
- int loppuindeksi = 0;
- String tempMerkkijono = "";
- String tulostettava = "";
- //alustetaan muuttujia
- if (eiTahtea) { //jos osamerkkijonossa ei ole tähteä
- loppuindeksi = merkkijono.length() - siistiOsamjono.length();
- } else if (alkupaasta) { //jos etsitään merkkijonon alkupäästä
- loppuindeksi = merkkijono.length() / 2 - 1;
- } else if (lopusta) { //jos etsitään merkkijonon lopusta
- kierroslaskuri = merkkijono.length() / 2;
- loppuindeksi = merkkijono.length() - 1;
- }
- //alla etsitään osamjonon esiintymiä mjonosta, ja tulostetaan ne
- while((alkuindeksi + kierroslaskuri) < loppuindeksi + 1) {
- tempMerkkijono = "";
- for(int i = alkuindeksi + kierroslaskuri; i < siistiOsamjono.length() + kierroslaskuri; i++) {
- tempMerkkijono += merkkijono.charAt(i);
- }
- if (siistiOsamjono.equals(tempMerkkijono)) {
- for (int x = 0; x < kierroslaskuri; x++) {//lisätään viivat ennen esiintymää
- tulostettava += "-";
- }
- tulostettava += tempMerkkijono; //lisätään tulosteeseen esiintymä
- for (int i = tulostettava.length(); i < merkkijono.length(); i++) {
- //lisätään viivat esiintymän jälkeen
- tulostettava += "-";
- }
- System.out.println(tulostettava); //tulostetaan esiintymä viivoineen
- tulostettava = "";
- }
- kierroslaskuri++;
- }
- //luuppi, jossa kysytään haluaako käyttäjä jatkaa, ja katsotaan, kertooko hän sen oikein
- while (tulikoVirhe) {
- System.out.println("Continue (y/n)?");
- char jatketaanko = In.readChar();
- //kysytään käyttäjältä, haluaako hän jatkaa
- if (jatketaanko == (JATKETAAN)) {
- lopetus = false;
- tulikoVirhe = false;
- } else if (jatketaanko == (LOPETETAAN)) {
- System.out.println("See you soon.");
- lopetus = true;
- tulikoVirhe = false;
- } else {
- System.out.println(VIRHE);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement