L1-064 估值一億的AI核心代碼 (20分)(Java正則表達式)
題目詳情:
AC代碼:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str;
int n=Integer.parseInt(in.nextLine());
for(int i=0;i<n;i++) {
str=in.nextLine();//整行讀入
System.out.println(str);//先原樣輸出
String cstr="";
char[] chars=str.toCharArray();//字符串轉數組
for(int j=0;j<chars.length;j++)//所有大寫英文字母變成小寫,除了I
{
if(chars[j]>='A'&&chars[j]<='Z'&&chars[j]!='I') {
chars[j]+=32;
}
cstr+=chars[j];
}
cstr=cstr.trim();//去掉首尾多餘空格
cstr=cstr.replaceAll(" +", " ");//相鄰單詞間多個空格換成1個空格
cstr=cstr.replaceAll(" (\\W)", "$1");//去掉標點符號前面的空格。標點符號默認爲除了大小寫英文字母和數字和下劃線之外的符號。\W就是與任何非單詞字符匹配
cstr=cstr.replaceAll("\\?", "!");//將所有?替換爲!
cstr=cstr.replaceAll("\\bcan you\\b","A");//如果can you兩邊是非字的(即要麼是空格要麼是除了大小寫字母和數字和下劃線)就替換成A
cstr=cstr.replaceAll("\\bcould you\\b","B");
cstr=cstr.replaceAll("\\b(I|me)\\b","C");//如果是獨立的I或者me就替換成C
cstr=cstr.replaceAll("A","I can");
cstr=cstr.replaceAll("B","I could");
cstr=cstr.replaceAll("C","you");
System.out.println("AI: "+cstr);
}
}
}
運行結果:
以下是我自己輸入的測試用例,就是想更好地說明獨立的can you和獨立的could you和獨立的I和獨立的me是什麼意思。即只要兩邊不是大小寫字母、數字和下劃線即可。
躲過了敲笨鍾那道題,卻躲不過這道題,這道題不就是爲Java的正則表達式量身定做的嗎。看來只熟悉C++還是腿短,應該C++、Java和Python齊頭並進才行。以下是對代碼中個別正則表達式簡單介紹。
相關鏈接:
L1-059 敲笨鍾 (20分)(C++)
L1-059 敲笨鍾 (20分)(Java正則表達式)
永遠相信美好🎈