Ho sostituito il vecchio codice con il seguente:

import java.util.*;

class ConversioneGradi {

public static void main (String[] args) {

double gradi_Celsius, gradi_Farheneit;
String s1, s2, s3;

Scanner tastiera = new Scanner(System.in);

System.out.println("Inserisci la temperatura in gradi celsius o farheneit, specificando a quale scala appartiene la temperatura con una lettera appropriata a seguito del numero: ");

s1 = tastiera.nextLine();

s2 = s1.toLowerCase();
int c = s2.indexOf("c");
int f = s2.indexOf("f");
int punto = s2.indexOf("°");

if ((c>=0)&&(punto<0)) {
s3 = s2.substring(0,c);
gradi_Celsius = Double.parseDouble(s3);
gradi_Farheneit = (9*(gradi_Celsius)/5)+32;
System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Farheneit + " " + "F"); }
else if ((f>=0)&&(punto<0)) {
s3 = s2.substring(0,f);
gradi_Farheneit = Double.parseDouble(s3);
gradi_Celsius = 5*(gradi_Farheneit-32)/9;
System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Celsius + " " + "C"); }
else if ((c>=0)&&(punto>=0)){
s3 = s2.substring(0,°);
gradi_Celsius = Double.parseDouble(s3);
gradi_Farheneit = (9*(gradi_Celsius)/5)+32;
System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Farheneit + " " + "F"); }
else if ((f>=0)&&(punto>=0)){
s3 = s2.substring(0,°);
gradi_Farheneit = Double.parseDouble(s3);
gradi_Celsius = 5*(gradi_Farheneit-32)/9;
System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Celsius + " " + "C"); }
else if ((c<0)&&(f<0)) {
System.out.println("Errore: devi specificare l' unità di misura"); }

}

}

Così ne ho approfittato per inserirci un bel messaggio d' errore

Però in fase di compilazione, mi da illegal character quando metto "°" come argomento di substring, non mi da alcun problema invece quando uso lo stesso carattere con indexOf.
Che significa? Mi pare alquanto strano che con indexOf lo riconosca e con substring no!