删除字符串的未定义部分

时间:2018-10-22 07:48:15

标签: java filtering

我的代码:

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语句应该能够完成任务, 类似于:

如果文本包含字符串"Hi, my name is""My name is"Hi, I'm fred等,请删除响应的那部分并仅返回if语句中未包含的唯一单词。

很抱歉,这是基本内容,但由于某种原因,我无法弄清楚。

我希望能够检查可能的语句的无限列表以进行过滤。

2 个答案:

答案 0 :(得分:1)

您可以使用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`

答案 1 :(得分:0)

您可以尝试检测一个通用模式并设计一个正则表达式来处理该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。这些规则也应适用于该输入的其他变体,尽管当然不能适用于所有输入,但也许您可以提出更好的建议。