CCF 模板生成系統 java 100分 詳解
阿新 • • 發佈:2018-12-01
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); } }