L1-064 估值一亿的AI核心代码 (20分)
原题链接:传送门
一、题目:
![](https://i-blog.csdnimg.cn/blog_migrate/c5b577a0441f24c31a7f474b2ae8e63c.png)
二、解析:
思路:
使用String对象中的replaceAll方法正则匹配替换。
这题做的时候多去百度一下正则,正则表达式匹配很强大!
注意:
需要注意的坑已经在代码中描述。
AC代码:
import java.util.Scanner;
/**
* L1-064 估值一亿的AI核心代码 (20分)
*
* @author: ChangSheng
* @date: 2019年12月9日 下午7:19:18
* @ref: 参考:https://blog.csdn.net/qq_43338951/article/details/89425156
*/
public class L1_064_估值一亿的AI核心代码 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
s.nextLine();
for (int i = 0; i < n; i++) {
String line = s.nextLine();
System.out.println(line);
// 1.去除首尾空格、单词间多个空格替换成一个、前面有空格的标点符号替换成无空格的标点符号、问号替换成感叹号
line = line.trim()
.replaceAll(" +", " ")
.replaceAll(" +(\\W)", "$1") // \\W代表符号
.replaceAll("\\?","!");
// 2.所有大写转小写,除了I
String lowerstr = "";
char[] arr = line.toCharArray();
for (int j = 0; j < arr.length; j++) {
if (arr[j] >= 'A' && arr[j] <= 'Z' && arr[j] != 'I') {
arr[j] += 32;
}
lowerstr += arr[j];
}
// 3.替换(can you, could you, I, me)
// 因为(can you, could you, I, me)直接替换会相互影响,所以不能同时替换,所以先将他们替换成别的东西
// 将can you,could you替换成I can I could
lowerstr = lowerstr.replaceAll("\\bcan you\\b", "A") // \\b只匹配单词边界,只是一个位置,不匹配任何字符。
.replaceAll("\\bcould you\\b", "B")
.replaceAll("\\b(I|me)\\b", "C");
// 再替换回来
lowerstr = lowerstr.replaceAll("A", "I can")
.replaceAll("B", "I could")
.replaceAll("C", "you");
System.out.println("AI: "+lowerstr);
}
}
}