我的代码:
import java.util.*;
class Tester {
public static void main(String[] args){
Scanner nameText = new Scanner(System.in);
System.out.println("What is your name ?");
String text = nameText.nextLine();
System.out.println("Hello " + text);
}
}
我的问题:让我们想象一下,此代码中的用户输入以下内容之一:
让我们假装易用,那些是唯一可能的回应。我想只返回fred
这个词。
我觉得if语句应该能够完成任务,这有点像:
如果text包含字符串"Hi, my name is"
或"My name is"
或Hi, I'm fred
等,请删除响应的该部分并仅返回if语句中未包含的唯一单词。
如果这是初步的,我道歉,但由于某种原因,我无法弄清楚。
我希望能够检查过滤掉的无限可能语句列表。
您可以尝试检测常见模式并设计正则表达式来处理pattern,而不是处理这些句子。例如,在所有句子中,名称是句子中的最后一个单词。此外,名称是唯一以大写字母开头的多字符单词。
String[] tests = {
"My name is Fred",
"My name is Fred.",
"Hi, My name is Fred.",
"Hey, I am Fred!",
};
Pattern p = Pattern.compile("\\b([A-Z][a-z]+)[^\\w]*$");
for (String test : tests) {
Matcher m = p.matcher(test);
m.find();
System.out.println(m.group(1));
}
所有测试的输出都是Fred
。这些规则也应该适用于那些输入的其他变体,虽然肯定不是全部,但也许你可以提出更好的东西。
您可以使用replace()
方法替换您不感兴趣的String部分,例如:
String[] replaceInResponse = new String[] { "Hey I am", "My name is" };
String response = "Hey I am mark";
for (String s : replaceInResponse) {
if (response.contains(s)) {
response = response.replace(s, "").trim();
break;
}
}
System.out.println(response); // Prints `mark`