Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.05 KB | None | 0 0
  1. //luodaan ohjelma, joka kysyy käyttäjältä merkkijonoa ja etsii siitä käyttäjän antaman toisen merkkijonon esiintymiä
  2. import java.util.*;
  3. public class SubstringFinderZ {
  4. public static void main(String[] args) {
  5. String VIRHE = "Error!";
  6. char JATKETAAN = 'y';
  7. char LOPETETAAN = 'n';
  8. char JOKERI = '*';
  9. boolean lopetus = false;
  10. boolean alkupaasta = false;
  11. boolean lopusta = false;
  12. boolean eiTahtea = true;
  13. String siistiOsamjono = "";
  14. String osamerkkijono = "";
  15. //alustetaan muuttujat, jotka näkyvät koko main-operaatioon
  16. System.out.println("Hello! I find substrings.");
  17. //tervehditään käyttäjää
  18. while(!lopetus) {
  19. boolean tulikoVirhe = true;
  20. boolean osaMjonoOK = false;
  21. System.out.println("Please, enter a string:");
  22. String merkkijono = In.readString();
  23. //luetaan käyttäjältä merkkijono, jota tarkastellaan
  24. while(!osaMjonoOK) {
  25. siistiOsamjono = ""; //tyhjennetään siistiOsamjono, jos se ei ole jo tyhjä.
  26. System.out.println("Please, enter a substring:");
  27. osamerkkijono = In.readString();
  28. //luetaan käyttäjältä osamerkkijono, jonka esiintymiä pidemmässä mjonossa tarkastellaan
  29. char ekaMerkki = osamerkkijono.charAt(0);
  30. char vikaMerkki = osamerkkijono.charAt(osamerkkijono.length() - 1);
  31.  
  32. //tarkastetaan, onko keskellä osamerkkijonoa eksynyt tähti
  33. boolean eksynytTahti = false;
  34. for (int i = 1; i < osamerkkijono.length() - 1; i ++) {
  35. if (osamerkkijono.charAt(i) == JOKERI) {
  36. eksynytTahti = true;
  37. }
  38. }
  39.  
  40. //tarkastetaan, onko keskellä merkkijonoa eksynyt tähti
  41. for (int i = 1; i < merkkijono.length() - 1; i ++) {
  42. if (merkkijono.charAt(i) == JOKERI) {
  43. eksynytTahti = true;
  44. }
  45. }
  46.  
  47. if (osamerkkijono.length() > merkkijono.length() || osamerkkijono.equals("*")
  48. || (ekaMerkki == (JOKERI) && vikaMerkki == (JOKERI))
  49. || eksynytTahti) {
  50. System.out.println(VIRHE);
  51. //tarkastetaan, onko syöte oikeanlainen
  52. }
  53.  
  54. if (ekaMerkki == (JOKERI)) {
  55. lopusta = true;
  56. eiTahtea = false;
  57. alkupaasta = false;
  58. for (int i = 1; i < osamerkkijono.length(); i++) {
  59. siistiOsamjono += osamerkkijono.charAt(i);
  60. }
  61. osaMjonoOK = true;
  62. } else if (vikaMerkki == (JOKERI)) {
  63. alkupaasta = true;
  64. eiTahtea = false;
  65. lopusta = false;
  66. for (int i = 0; i < osamerkkijono.length() - 1; i++) {
  67. siistiOsamjono += osamerkkijono.charAt(i);
  68. }
  69. osaMjonoOK = true;
  70. //tarkastellaan, esiintyykö tähteä, ja jos esiintyy, siistitään se pois osamjonosta
  71. } else {
  72. osaMjonoOK = true;
  73. eiTahtea = true;
  74. alkupaasta = false;
  75. lopusta = false;
  76. siistiOsamjono = osamerkkijono;
  77. }
  78. //tarkastetaan onko osamerkkijono OK, jos ei, kysytään uutta ja jos on, jatketaan
  79. }
  80.  
  81. int kierroslaskuri = 0;
  82. int alkuindeksi = 0;
  83. int loppuindeksi = 0;
  84. String tempMerkkijono = "";
  85. String tulostettava = "";
  86. //alustetaan muuttujia
  87. if (eiTahtea) { //jos osamerkkijonossa ei ole tähteä
  88. loppuindeksi = merkkijono.length() - siistiOsamjono.length();
  89. } else if (alkupaasta) { //jos etsitään merkkijonon alkupäästä
  90. loppuindeksi = merkkijono.length() / 2 - 1;
  91. } else if (lopusta) { //jos etsitään merkkijonon lopusta
  92. kierroslaskuri = merkkijono.length() / 2;
  93. loppuindeksi = merkkijono.length() - 1;
  94. }
  95.  
  96. //alla etsitään osamjonon esiintymiä mjonosta, ja tulostetaan ne
  97. while((alkuindeksi + kierroslaskuri) < loppuindeksi + 1) {
  98. tempMerkkijono = "";
  99. for(int i = alkuindeksi + kierroslaskuri; i < siistiOsamjono.length() + kierroslaskuri; i++) {
  100. tempMerkkijono += merkkijono.charAt(i);
  101. }
  102. if (siistiOsamjono.equals(tempMerkkijono)) {
  103. for (int x = 0; x < kierroslaskuri; x++) {//lisätään viivat ennen esiintymää
  104. tulostettava += "-";
  105. }
  106. tulostettava += tempMerkkijono; //lisätään tulosteeseen esiintymä
  107. for (int i = tulostettava.length(); i < merkkijono.length(); i++) {
  108. //lisätään viivat esiintymän jälkeen
  109. tulostettava += "-";
  110. }
  111. System.out.println(tulostettava); //tulostetaan esiintymä viivoineen
  112. tulostettava = "";
  113. }
  114.  
  115. kierroslaskuri++;
  116. }
  117.  
  118. //luuppi, jossa kysytään haluaako käyttäjä jatkaa, ja katsotaan, kertooko hän sen oikein
  119. while (tulikoVirhe) {
  120. System.out.println("Continue (y/n)?");
  121. char jatketaanko = In.readChar();
  122. //kysytään käyttäjältä, haluaako hän jatkaa
  123. if (jatketaanko == (JATKETAAN)) {
  124. lopetus = false;
  125. tulikoVirhe = false;
  126. } else if (jatketaanko == (LOPETETAAN)) {
  127. System.out.println("See you soon.");
  128. lopetus = true;
  129. tulikoVirhe = false;
  130. } else {
  131. System.out.println(VIRHE);
  132. }
  133. }
  134. }
  135. }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement