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.
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top