我正在为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语句中进行比较时,没有任何反应,我的意思是下一个语句没有执行,可能是什么问题,帮助将不胜感激。
答案 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
。