2014-11-29 5 views
0

Я создаю помощник для голоса для андроида, здесь этот метод извлекает имена контактов один за другим и сравнивает его с входом 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); 
     } 
    } 

Вот, например, я отправка «вызов Каран» в качестве входных данных, при отладке названия «Каран» придумывает в качестве значения переменного имени, но при сравнении его в If- заявление, ничего не происходит, я имею в виду, что следующее утверждение не выполняется, что может быть проблемой, помощь будет оценена.

+2

Как 'text_received.toLowerCase()' содержать 'Karan', который включает в себя букву верхнего регистра? –

ответ

1

Вам необходимо преобразовать переменную name в нижний регистр, так как метод String.contains() чувствителен к регистру, поэтому call karan не содержит Karan.

+0

Глупо, чтобы этого не видеть, спасибо: D – dw19

2

Если вы просто хотите сравнить 2 строки, независимо от того, имеют ли они нижний или верхний регистр, вы должны использовать equalsIgnoreCase. в вашем случае:

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

EDIT: согласно Богуслав Бургхард комментарий, если вам нужно найти определенную часть строки и сделать его игнорировать случай, вы можете использовать регулярные выражения с функцией соответствия:

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

Это не сработает, потому что из того, что я понимаю, автор этого вопроса должен определить, содержит ли одна строка другие (игнорируя случай). Если вы посмотрите на образец ввода, упомянутый в вопросе, «call karan» .equalsIgnoreCase («Karan») 'вернет' false'. –

+0

из документации: «Этот метод сравнивает ** эту строку с другой строкой **, игнорируя соображения случая. Две строки ** считаются равными игнорирующими случаем **, если они имеют одинаковую длину ** и соответствующие символы в двух строки равны игнорируемому случаю. ** « – ymz

+0

« если они имеют одинаковую длину »-> но, очевидно,« call karan »и« Karan »' не имеют одинаковой длины для стартеров, поэтому это не может работать это использование случай. –

Смежные вопросы