为了账号安全,请及时绑定邮箱和手机立即绑定

删除字符串的未定义部分

删除字符串的未定义部分

DIEA 2021-12-01 15:49:02
我的代码: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等,删除响应的那部分,并返回仅不包含在,如果在语句中的独特字。如果这是基本的,我深表歉意,但由于某种原因我无法弄清楚。我希望能够检查要过滤掉的可能语句的无限列表。
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-12-01
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

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


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. 这些规则也应该适用于该输入的其他变体,虽然肯定不是全部,但也许您可以想出更好的方法。


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信