Java 删除字符串中未定义的部分

Java 删除字符串中未定义的部分,java,filtering,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 " +

我的代码:

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,我的名字是”
“我的名字是”
Hi,我是fred
等,请删除响应的该部分并仅返回If语句中未包含的唯一单词

我很抱歉,如果这是初步的,但出于某种原因,我无法理解它


我希望能够根据无限的可能语句列表进行检查以筛选。

您可以使用
replace()
方法替换您不感兴趣的字符串部分,例如:

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`

您可以尝试检测一种常见模式并设计一个正则表达式来处理这些句子,而不是精确地处理这些句子。例如,在你所有的句子中,名字是句子中的最后一个词。此外,名称是唯一以大写字母开头的多字符单词

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
。这些规则也应该适用于该输入的其他变体,尽管肯定不是所有变体,但也许你可以想出更好的方法。

如果我说的没有意义。。。。我希望能够根据我个人定义的短语词典,过滤掉除关键字以外的所有单词,以便有一种逻辑方法来预测可以键入的内容。例如在带有过滤内容的视频游戏中,有人说“ASS”,系统返回“***”。系统有一个单词词典,ass是其中之一,改为***。这看起来很简单,一定是我忽略了什么,或者只是不够成熟,不知道怎么做。是的,“如果myString包含(arrayOfPossibleThingsToFilterOut)中的一个,那么…”如果答案是你的问题。对于那些具体的例子(可能还有更多),你可以一直记下句子的最后一个字。谢谢。这就是我正在寻找的答案。还有,谢谢你这么快的回复。哇。那就更好了!谢谢各位,这真的很有帮助。我希望我能给你们两个答案,但这一个太棒了!