Как получить пользовательский ввод от элемента и обеспечить точный ответ? - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь сделать чат-бота на своем телефоне Android, прямо сейчас, я хочу сделать так, чтобы, если кто-то говорит «Эй, чувак», бот отвечает: «Суп человек!»Я хочу иметь возможность добавить больше этих случаев.

Я пытался использовать этот метод здесь

String A = "Hey man";

MobileElement element = (MobileElement) 
driver.findElement(By.id("com.samsung.android.app.memo:id/editText1"));
String text = element.getText();
System.out.println(text);

if (text == A) {

System.out.println("Sup man!");

} else {

System.out.println("No response available");

}

Но это не работает, потому что text = element.getText() ине "Эй, чувак".Кто-нибудь может указать мне правильное направление о том, как сделать это правильно?

1 Ответ

2 голосов
/ 28 сентября 2019

Вы сравниваете свои строки, text и A, используя ==, что является неправильным способом сравнения строк - он проверяет, являются ли два объекта String одним и тем же объектом, а не только тем, что они содержат один и тот же текст.

Вы хотите сравнить, используя if (text.equals(A)) или, если вы хотите сопоставить без учета регистра, вы бы использовали if (text.equalsIgnoreCase(A))

с .equals(), который вы ищете "Эйчеловек ", но если человек наберет" эй человек ", они не будут совпадать, и бот не будет отвечать только из-за прописных и строчных букв" привет "против" привет ".Если вы не хотите соответствовать фразе, независимо от того, как кто-то печатает ее, вы использовали бы .equalsIgnoreCase()

Если вы хотите иметь несколько фраз, вы можете использовать массив или какой-то Collection и вы перебираете его, чтобы найти совпадение, что-то вроде

for (final String phrase : phrases) {
    if (phrase.equalsIgnoreCase(text)) {
        System.out.println(some_text_for_that_phrase);
    }
}

... где я использую phrases вместо A, потому что это более наглядно.

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

final String response = phraseMap.get( userText.toLowerCase() );
if (response != null) {
    System.out.println(response);
}

Невозможно сравнить регистр игнорирования с ключами карты, поэтому вы захотитестрочные буквы каждой ключевой фразы, которую вы положили на карту, затем строчные буквы пользовательского ввода, чтобы они соответствовали тому, что на карте.Значения ответов, конечно, могут быть любым сочетанием случаев, которое вы хотите.

Как вы заполните карту ключевыми фразами, и ответы будут другим отдельным вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...