Originariamente inviato da valia
codice:
private String vocaliMaiuscole(String stringa) {
		String ret = "";
		Character test ;
		
		if (stringa.length() == 0) {
			ret = stringa ; 
		} else {
			test = stringa.charAt(0);
			if (isVocale(test)) {
				test = Character.toUpperCase(test);
			}
			ret += test;
			ret += vocaliMaiuscole(stringa.substring(1));
		}
		return ret;
	}

	private boolean isVocale(char character) {
		boolean ret = false;
		switch (character) {
		case 'A':
		case 'a':
		case 'E':
		case 'e':
		case 'I':
		case 'i':
		case 'O':
		case 'o':
		case 'U':
		case 'u':
			ret = true;
			break;
		}

		return ret;

	}
chissà perché io la ricorsione l'ho sempre vista con 2 casi, uno base e uno ricorsivo.
Gli altri secondo me complicano la vita.
Qui hai un esempio della mia implementazione (funziona) e volendo puoi generalizzare (chiedendo anche l'inversione del case)
Il tuo esempio va bene se non per il fatto che i tuoi metodi sono d'istanza , andrebbero definiti statici...piccola distrazione (penso)