我现在正在尝试在自己的android手机上制作一个聊天机器人,以便能够使有人说“嘿,男人”,该机器人以“ Sup man!”来回应。我也希望能够添加更多这些案例。
我在这里尝试过使用此方法
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()
而不是“嘿男人”。谁能指出正确方法的正确方向?
答案 0 :(得分:2)
您正在使用text
比较字符串A
和==
,这是比较字符串的错误方法-它测试两个String对象是否是同一个对象,而不仅仅是它们包含相同的文本。
您要使用if (text.equals(A))
进行比较,或者,如果要匹配而不考虑大小写,请使用if (text.equalsIgnoreCase(A))
使用.equals()
时,您正在寻找“ Hey man”,但是如果该人键入“ Hey man”,则这些字符将不匹配,并且漫游器不会仅仅因为大小写而响应“嘿”与“嘿”。如果您想匹配该短语,无论有人如何键入,都可以使用.equalsIgnoreCase()
如果您想使用多个短语,则可以使用数组或某种Collection,然后在其上循环查找匹配项,例如
for (final String phrase : phrases) {
if (phrase.equalsIgnoreCase(text)) {
System.out.println(some_text_for_that_phrase);
}
}
...我正在使用phrases
而不是A
的地方,因为它更具描述性。
如果您希望对每个可能匹配的短语使用不同的响应,则可能希望您的 Collection 为Map,其中地图 key 是您想要的短语匹配,并且地图 value 是您将给出的响应。在这种情况下,您将获取用户文本并直接使用它来获取地图的响应,而无需循环
final String response = phraseMap.get( userText.toLowerCase() );
if (response != null) {
System.out.println(response);
}
您无法将忽略大小写与地图键进行比较,因此,您希望将输入到地图中的每个关键短语都小写,然后将用户输入小写,使其与地图中的内容匹配。响应值当然可以是您想要的大小写混合形式。
如何用关键短语和答案填充地图将是另一个单独的问题。