时间限制
400 ms
内存限制
64 MB
题目描述:
以上图片来自新浪微博。
本题要求你实现一个稍微更值钱一点的 AI 英文问答程序,规则是:
- 无论用户说什么,首先把对方说的话在一行中原样打印出来;
- 消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉;
- 把原文中所有大写英文字母变成小写,除了 I;
- 把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词;
- 把原文中所有独立的 I 和 me 换成 you;
- 把原文中所有的问号 ? 换成惊叹号 !;
- 在一行中输出替换后的句子作为 AI 的回答。
输入格式:
输入首先在第一行给出不超过 10 的正整数 N,随后 N 行,每行给出一句不超过 1000 个字符的、以回车结尾的用户的对话,对话为非空字符串,仅包括字母、数字、空格、可见的半角标点符号。
输出格式:
按题面要求输出,每个 AI 的回答前要加上 AI: 和一个空格。
输入样例:
6
Hello ?
Good to chat with you
can you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know
输出样例:
Hello ?
AI: hello!
Good to chat with you
AI: good to chat with you
can you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don’t know
输出指定对用户的回答
emmmmmmm
正则 匹配 替换 输出
import java.io.*;
import java.math.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
int n = sc.nextInt();
sc.nextLine();
while (n-- > 0)
{
String str = sc.nextLine();
String s = "";
for (int i = 0; i < str.length(); i++)
{
char a = str.charAt(i);
if (a >= 'A' && a <= 'Z' && a != 'I')
a = (char) (a - 'A' + 'a');
s += a;
}
// 去掉首位空格
s = s.trim();
// 去掉中间多余空格
s = s.replaceAll(" +", " ");
// 去掉标点符号前的多余空格
s = s.replaceAll(" (\\W)", "$1");
// ? 改为 !
s = s.replaceAll("\\?", "!");
// 预处理 将 can you 改为 A
s = s.replaceAll("\\b(can you)\\b", "A");
// 预处理 将 could you 改为 B
s = s.replaceAll("\\b(could you)\\b", "B");
// 预处理 将 I 或 me 改为 C
s = s.replaceAll("\\b(I|me)\\b", "C");
// 输出原话
out.println(str);
// 将 A 替换为 I can
s = s.replace("A", "I can");
// 将 B 替换为 I could
s = s.replace("B", "I could");
// 将 C 替换为 you
s = s.replace("C", "you");
// 输出修改后的字符串
out.println("AI: " + s);
}
out.flush();
out.close();
}
static Scanner sc = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
}
如果有说错的 或者 不懂的 尽管提 嘻嘻
一起进步!!!