java - 如何从元素中获取用户输入并提供准确的响应?
问题描述
我正在尝试在我的 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()
而不是“嘿,伙计”。谁能指出我如何正确地做到这一点的正确方向?
解决方案
您正在比较您的字符串,text
并且A
,使用==
which 是比较字符串的错误方法 - 它测试两个 String 对象是否是同一个对象,而不仅仅是它们包含相同的文本。
你想比较使用if (text.equals(A))
,或者,如果你想匹配而不考虑大小写,你会使用if (text.equalsIgnoreCase(A))
与.equals()
您一起寻找“嘿,伙计”,但如果该人键入“嘿伙计”,这些将不匹配,并且机器人不会仅仅因为大写与小写“嘿”与“嘿”而做出响应. 如果您想匹配该短语,无论有人如何键入它,您都会使用.equalsIgnoreCase()
如果你想有多个短语,你可以使用一个数组,或者某种集合,你可以循环它来找到一个匹配,比如
for (final String phrase : phrases) {
if (phrase.equalsIgnoreCase(text)) {
System.out.println(some_text_for_that_phrase);
}
}
...我在哪里使用phrases
而不是A
因为它更具描述性。
如果您希望每个可能匹配的短语有不同的响应,您可能希望您的Collection是一个Map,其中映射键是您要匹配的短语,映射值是您要给出的响应。在这种情况下,您将获取用户文本并直接使用它从地图中获取响应,而无需循环
final String response = phraseMap.get( userText.toLowerCase() );
if (response != null) {
System.out.println(response);
}
您无法将忽略大小写与地图键进行比较,因此您希望将您放入地图中的每个关键短语小写,然后将用户输入小写以匹配地图中的内容。当然,响应值可以是您想要的任何大小写组合。
如何用关键短语和响应填写地图将是另一个单独的问题。
推荐阅读
- amazon-web-services - 用于 AWS 类型的 aws_api_gateway_integration 的 uri(集成)到 DynamoDb
- cakephp - 无法配置 Header 安全中间件 CakePHP
- android - 如何在 Imageview 下方放置一个按钮
- javascript - 反应并导航到选定的项目
- java - 通过另一个活动向活动发送价值
- c++ - hdfs c 程序失败,出现“异常:ExceptionUtils::getStackTrace 错误。)”
- javascript - JavaScript getComputedStyle 不适用于颜色名称?
- design-patterns - 哪种设计模式可以序列化对象 Builder 和 Visitor ?
- python - 查找图形的峰值和底部并标记它们
- javascript - 我可以保存我使用 Javascript(可能使用 PHP)编辑的图像,以便更改是永久性的吗?