【问题标题】:user input ignore case用户输入忽略大小写
【发布时间】:2011-03-27 09:39:26
【问题描述】:

我正在阅读用户输入。我想知道如何将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.

【问题讨论】:

  • equalsIgnoreCase 是什么? (另外,添加了 java 标签)

标签: java input user-input stdstring ignore-case


【解决方案1】:

如果您不需要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 接口为您提供的排序时才有效。

【讨论】:

    【解决方案2】:

    equalsIgnoreCase 是 String 类的一个方法。

    试试

    someString.equalsIgnoreCase(bufRead.readLine());
    

    【讨论】:

      【解决方案3】:

      如果你想忽略大小写,你检索时不能这样做。

      相反,当您将其放入列表时,您需要将其移动到全部大写或全部小写。

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

      然后,你可以稍后再做

      aListColors.remove(rem.toUpperCase());
      

      【讨论】:

        【解决方案4】:

        由于 ArrayList.remove 方法使用 equals 而不是 equalsIgnoreCase 您必须自己遍历列表。

        Iterator<String> iter = aListColors.iterator();
        while(iter.hasNext()){
             if(iter.next().equalsIgnoreCase(rem))
             {
                iter.remove();
                break;
             }
        }
        

        【讨论】:

          【解决方案5】:

          实现了集合中的方法 remove 以删除 equals() 中的元素,因此 "Red".equals("red") 为假,您无法在 List 中找到具有 equalsIgnnoreCase 的方法。这仅对 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的解决方案:编写遍历列表并以equalsIgnoreCase方式找到你的“红色”的方法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-10-21
            • 1970-01-01
            • 2015-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-28
            • 1970-01-01
            相关资源
            最近更新 更多