L1-064 估值一億的AI核心代碼 (20分)(Java正則表達式)

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正則表達式)

永遠相信美好🎈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章