//EsRicorsione.java
//Risolvere i seguienti esercizi utilizzando la ricorsione.

public class EsRicorsione {
  
/*
1. Scrivere un metodo statico 

     public static boolean appartiene(String s, char c) 

   che data un stringa s ed un carattere c verifichi se c appare in s.
   Ad esempio l'invocazione appartiene("pippo", 'i') deve restituire
   true.
*/

  public static boolean appartiene(String s, char c) {    
    if (s.equals("")) return false;
    else 
      if (s.charAt(0)==c) return true;
      else return appartiene(s.substring(1),c);
  }



/*
2. Scrivere un metodo statico

     public static int occorrenze(String s, char c)  

   che data un stringa s ed un carattere c restituisca il numero di
   occorrenze di c in s. Ad esempio l'invocazione 
   occorrenze("pippo",'p') deve restituire 3.
*/

  public static int occorrenze(String s, char c) {
    if (s.equals("")) return 0;
    else 
      if (s.charAt(0)==c) return 1 + occorrenze(s.substring(1),c);
      else return occorrenze(s.substring(1),c);
  }



/*
3. Scrivere un metodo statico 

     public static String underscore(String s)

   che data un stringa s restituisca la stringa ottenuta da s
   sostituiendo gli spazi bianchi con underscore ('_'). Ad esempio
   l'invocazione underscore("pippo e topolino") deve restituire
   la stringa "pippo_e_topolino".
*/

  public static String underscore(String s) {   
    if (s.equals("")) return "";
    else if (s.charAt(0)==' ') 
      return "_" + underscore(s.substring(1));
    else return s.substring(0,1) + underscore(s.substring(1));
  }



/*
 4. Scrivere un metodo statico 

     public static String reverse(String s)
   
   che data una stringa s restituisca una stringa con i caratteri
   invertiti rispetto alla stringa data. Ad esempio l'invocazione
   reverse("stringa") deve restituire la stringa "agnirts".
*/


  public static String reverse(String s) {
    if (s.equals("")) return "";
    else return s.substring(s.length()-1,s.length()) +
           reverse(s.substring(0,s.length()-1));  
  }



/*
5. Scrivere un metodo statico 

     public static String eliminaVocali(String s) 

   che data un stringa s restituisca la stringa ottenuta da s
   eliminando le vocali. Ad esempio l'invocazione vocali("pippo") deve
   restituire la stringa "ppp".
*/

    public static String eliminaVocali(String s) {      
      if (s.equals("")) return "";
      else if (s.charAt(0)=='a'||
               s.charAt(0)=='e'||
               s.charAt(0)=='i'||
               s.charAt(0)=='o'||
               s.charAt(0)=='u') return eliminaVocali(s.substring(1));
      else return s.substring(0,1) + eliminaVocali(s.substring(1));
    }
 


/*
6. Scrivere un metodo statico 

     public static boolean palindroma(String s) 

   che data una stringa s restituisca un valore booleano vero se la
   stringa e' palindroma falso altrimenti. Una stringa e' palindroma se
   puņ essere letta da sinistra verso destra e da destra verso
   sinistra indifferentemente (es. "anna", "ailatiditalia", ...).

*/

  public static boolean palindroma(String s) {
    int l=s.length();
    if (l<2)
      return true;
    else 
      if (!s.substring(0,1).equals(s.substring(l-1,l))) 
        return false;
      else
        return palindroma(s.substring(1,l-1));		
  }

}
