contains()方法无法按预期工作

时间:2014-11-29 18:32:47

标签: java android string contains

我正在为android构建一个语音助手,这个方法逐个检索联系人名称并将其与SpeechToText输入进行比较。

我成功获取了联系人姓名,但是当我将其与输入文本进行比较时,没有任何事情发生。

这是代码

private void callFromContact(String text_received, int index){

    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
    while (phones.moveToNext())
    {
        String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        if(text_received.toLowerCase().contains(name)){
            String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            contactNames.add(name);
            contactNumbers.add(phoneNumber);
        }
    }

例如,我发送"致电karan"作为输入,同时调试名称" Karan"作为name变量的值出现,但是当在if语句中进行比较时,没有任何反应,我的意思是下一个语句没有执行,可能是什么问题,帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果您只想比较2个字符串,无论它们是小写还是大写,都应使用 equalsIgnoreCase 。在你的情况下:

if (text_received.equalsIgnoreCase(name))
{
   //...
}

编辑:根据 Bohuslav Burghard 评论如果您需要搜索字符串的特定部分并使其忽略大小写,您可以使用带匹配函数的正则表达式:

if (text_received.matches("(?i:.*" + name + ".*)"))
{
    //...
}

答案 1 :(得分:1)

您还需要将name变量转换为小写,因为String.contains()方法区分大小写,因此call karan不包含Karan