Input dell'utente Ignora il caso
-
12-11-2019 - |
Domanda
Sto leggendo un input dell'utente. Mi chiedevo come avrei fatto domanda equalsIgnoreCase
all'input dell'utente?
ArrayList<String> aListColors = new ArrayList<String>();
aListColors.add("Red");
aListColors.add("Green");
aListColors.add("Blue");
InputStreamReader istream = new InputStreamReader(System.in) ;
BufferedReader bufRead = new BufferedReader(istream) ;
String rem = bufRead.readLine(); // the user can enter 'red' instead of 'Red'
aListColors.remove(rem); //equalsIgnoreCase or other procedure to match and remove.
Soluzione
Se non hai bisogno di un List
potresti usare un Set
Inizializzato con un comparatore insensibile al caso:
Set<String> colors =
new TreeSet<String>(new Comparator<String>()
{
public int compare(String value1, String value2)
{
// this throw an exception if value1 is null!
return value1.compareToIgnoreCase(value2);
}
});
colors.add("Red");
colors.add("Green");
colors.add("Blue");
Ora, quando si chiama Rimuovi, il caso dell'argomento non conta più. Quindi entrambe le seguenti righe funzionerebbero:
colors.remove("RED");
o
colors.remove("Red");
Ma questo funzionerà solo se non hai bisogno dell'ordinamento che il List
Le interfacce ti danno.
Altri suggerimenti
EqualsignoreCase è un metodo della classe stringa.
Provare
someString.equalsIgnoreCase(bufRead.readLine());
Se vuoi ignorare il caso, non puoi farlo quando si recupera.
Invece, devi spostarlo su tutti i cappucci o tutti i minuscole quando lo inserisci nell'elenco.
ArrayList<String> aListColors = new ArrayList<String>();
aListColors.add("Red".toUpperCase());
aListColors.add("Green".toUpperCase());
aListColors.add("Blue".toUpperCase());
Quindi, puoi fare più tardi
aListColors.remove(rem.toUpperCase());
Dal momento che il metodo ArrayList.Remove utilizza uguale anziché EqualsIGoreCase devi iterare da solo nell'elenco.
Iterator<String> iter = aListColors.iterator();
while(iter.hasNext()){
if(iter.next().equalsIgnoreCase(rem))
{
iter.remove();
break;
}
}
Il metodo rimuove nelle raccolte viene implementato per rimuovere elementi in uguali () che significa "rosso" .equals ("rosso") è falso e non è possibile trovare un metodo che ha equalsignnorecase nell'elenco. Questo avrebbe senso solo per la stringa in modo da poter scrivere la tua classe e aggiungere il metodo uguali - cosa è uguale a te
class Person {
String name;
// getter, constructor
@Override
public boolean equals(Object obj) {
return (obj instanceof Person && ((Person)obj).getName().equalsIgnoreCase(name));
}
}
public class MyHelloWorld {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
list.add(new Person("Red"));
list.remove(new Person("red"));
}
}
O soluzione senza override uguale: metodo di scrittura che itera attraverso l'elenco e trova il tuo "rosso" in modo equalsignorecase.