1. 程式人生 > >CCF 模板生成系統 java 100分 詳解

CCF 模板生成系統 java 100分 詳解

import java.util.HashMap;
import java.util.Scanner;
public class Main {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int m=scan.nextInt();
scan.nextLine();
StringBuilder input=new StringBuilder();

//讀取輸入,把多行存成一行,這樣可以方便處理,但要在每行後面加換行符
for(int i=0;i<n;i++)  input.append(scan.nextLine()).append("\n");

HashMap<String, String> map=new HashMap<>();
for(int i=0;i<m;i++) {

//讀取空格前面的內容
	String key=scan.next();
	String value=scan.nextLine().trim();

//提取引號裡面的內容
	value=value.substring(1, value.length()-1);
	map.put(key, value);
}
scan.close();

//核心邏輯,短短十行:

/**
逐個字元遍歷,遇到{{停止,刪除{{與空格,然後,逐個字元地存進key,再從input刪掉,直到空格,
刪掉空格和}}
若map中有key,就插入
整體思想:先刪後插
*/
for(int i=0;i<input.length();i++) {
	if(input.charAt(i)=='{'&&input.charAt(i+1)=='{') {
		input.delete(i, i+3);//刪除{{與空格
		String key="";
		while(input.charAt(i)!=' ') {
			key+=input.charAt(i);//逐個字元地存進key
			input.deleteCharAt(i);//再從input刪掉
		}
		input.delete(i, i+3);//刪掉空格和}}
		if(map.containsKey(key))
		    input.insert(i, map.get(key));//若map中有key,就插入

	}
}
		System.out.println(input);
}
	}