пользовательский ввод игнорировать регистр - PullRequest
0 голосов
/ 27 марта 2011

Я читаю пользовательский ввод. Мне было интересно, как бы я применил equalsIgnoreCase для ввода пользователя?

 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.

Ответы [ 5 ]

2 голосов
/ 27 марта 2011

Если вам не нужен List, вы можете использовать Set, инициализированный без учета регистра:

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");

Теперь, когда вы вызываете remove, регистр аргумента больше невопросы.Таким образом, обе следующие строки будут работать:

colors.remove("RED");

или

colors.remove("Red");

Но это будет работать только в том случае, если вам не нужен порядок, который дает интерфейс List.

0 голосов
/ 27 марта 2011

Метод remove в коллекциях реализован для удаления элементов в equals (), что означает, что «Red» .equals («red») имеет значение false, и вы не можете найти метод, имеющий equalsIgnnoreCase в List.Это имело бы смысл только для String, поэтому вы можете написать свой собственный класс и добавить метод equals - то, что вам равно

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"));
    }
}

Или решение без переопределения equals: написать метод, который выполняет итерацию по списку и находит ваш «красный»"равным образом игнорировать.

0 голосов
/ 27 марта 2011

Если вы хотите игнорировать регистр, вы не сможете сделать это при получении.

Вместо этого вам нужно переместить его на все прописные или строчные буквы, когда вы поместите его в список.

ArrayList<String> aListColors = new ArrayList<String>();
aListColors.add("Red".toUpperCase());
aListColors.add("Green".toUpperCase());
aListColors.add("Blue".toUpperCase());

Тогда вы можете сделать позже

aListColors.remove(rem.toUpperCase());
0 голосов
/ 27 марта 2011

Поскольку метод ArrayList.remove использует equals вместо equalsIgnoreCase, вам придется самим перебирать список.

Iterator<String> iter = aListColors.iterator();
while(iter.hasNext()){
     if(iter.next().equalsIgnoreCase(rem))
     {
        iter.remove();
        break;
     }
}
0 голосов
/ 27 марта 2011

equalsIgnoreCase - это метод класса String.

Попробуйте

someString.equalsIgnoreCase(bufRead.readLine());
...