/** * Classe eseguibile che realizza la ricerca del minimo in un array di interi * in modo ricorsivo * * @author Adriano Luchetta * @version 5-nov-2005 * */ import java.util.Random; import javax.swing.JOptionPane; public class RecursiveSubstringFinder { private static int index = -1; private static boolean findSubstring(String s, String sub) { index++; // casi base if (s.length() < sub.length()) return false; if (sub.equals(s.substring(0, sub.length()))) return true; // passo ricorsivo return findSubstring(s.substring(1), sub); } public static void main(String[] args) { final String GIVEN_STRINGS = "/d"; final String RANDOM_STRINGS = "/r"; if (args.length < 3) { JOptionPane.showMessageDialog(null, "uso: $java RecursiveSubstringFinder /opt string substring"); System.exit(1); } String opt = args[0]; String msg = ""; if (opt.equals(GIVEN_STRINGS)) { String str = args[1]; String subStr = args[2]; /* gestione messaggio di uscita formato del messaggio: stringa = "..." sottostringa = "..." presente all'indice k (oppure non presente) */ msg = "stringa = " + str + "\nsottostringa = " + subStr + "\n"; if (findSubstring(str, subStr)) JOptionPane.showMessageDialog(null, msg + "presente agli indici " + index + " - " + (index + subStr.length() - 1)); else JOptionPane.showMessageDialog(null, msg + "non presente"); } else if (opt.equals(RANDOM_STRINGS)) { final int MIN_CHAR = 'a'; final int MAX_CHAR = 'z'; final int CHAR_RANGE = MAX_CHAR - MIN_CHAR; // generazione della stringa di caratteri casuali int strLength = Integer.parseInt(args[1]); String str = ""; Random rand = new Random(); for (int i = 0; i < strLength; i++) { char randChar = (char) (MIN_CHAR + rand.nextInt(CHAR_RANGE)); str = str + randChar; } // generazione della sottostringa di caratteri casuali int subLength = Integer.parseInt(args[2]); String subStr = ""; for (int i = 0; i < subLength; i++) { char randChar = (char) (MIN_CHAR + rand.nextInt(CHAR_RANGE)); subStr = subStr + randChar; } /* gestione messaggio di uscita formato del messaggio: lunghezza stringa = n, lunghezza sottostringa = m stringa = "..." sottostringa = "..." presente all'indice k (oppure non presente) */ msg = "lunghezza stringa = " + strLength + ", lunghezza sottostringa= " + subLength + "\n"; msg = msg + "stringa = " + str + "\nsottostringa = " + subStr + "\n"; if (findSubstring(str, subStr)) JOptionPane.showMessageDialog(null, msg + "presente agli indici " + index + " - " + (index + subStr.length() - 1)); else JOptionPane.showMessageDialog(null, msg + "non presente"); System.exit(0); } else JOptionPane.showMessageDialog(null, "opzione " + args[0] + " non ammessa"); System.exit(0); } }