包含。(cs)在android中区分大小写

时间:2014-08-03 12:15:26

标签: java android

我有一个写在onTextChanged上的搜索方法。这将搜索Hashmap的Arraylist。这里的问题是我只获得大写或小写的搜索结果。

如何通过使其不区分大小写来解决此问题。

这是我的代码:

public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            song = 2;
            songsList2.clear();

            for (HashMap<String, String> map : songsList)
            {

                if(map.get(KEY_TITLE).contains(s))
                {
                    HashMap<String, String> map2 = new HashMap<String, String>();
                    // adding each child node to HashMap key => value
                    map2.put(KEY_ID, map.get(KEY_ID));
                    map2.put(KEY_TITLE, map.get(KEY_TITLE));
                    map2.put(KEY_ARTIST, map.get(KEY_ARTIST));
                    map2.put(KEY_DURATION, map.get(KEY_DURATION));
                    map2.put(KEY_THUMB_URL, map.get(KEY_THUMB_URL));

                    songsList2.add(map2);   
                    adapter=new LazyAdapter(CustomizedListView.this, songsList2);
                    list.setAdapter(adapter);
                }
            }

            adapter.notifyDataSetChanged();

        }

谢谢!

2 个答案:

答案 0 :(得分:4)

是的,contains方法区分大小写。如果您不想这样做,您可以编译正则表达式模式并使用它,或者只是将搜索的值设为小写,然后检查它,就像

一样

if(map.get(KEY_TITLE).toLowerCase().contains(s)...

假设char序列的情况相同。

修改: 正如评论中所指出的,为了确保在没有假设char序列案例的情况下进行匹配,您必须使用toLowerCase来强制搜索短语到同一个案例

if(map.get(KEY_TITLE).toLowerCase().contains(s.toString().toLowerCase())...

答案 1 :(得分:1)

首先避免在使用接口时使用具体类。据我所知songsListHashMap的列表或数组。将定义更改为List<Map<String, String>>。现在使用TreeMap代替HashMap,但在创建实例时传递String.CASE_INSENSITIVE_ORDER比较器:

Map<String, String> map = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

现在您无需更改代码。你可以放在那里&#34;黄色潜水艇&#34;并获得黄色潜水艇&#34;或者&#34;黄色潜水艇&#34;管他呢。但是存储在地图中的实际值仍然是&#34;黄色潜水艇&#34; (你输入的值),所以如果你迭代你得到的条目&#34;纠正&#34;值。