1. 程式人生 > >CCF-模板生成系統-Java

CCF-模板生成系統-Java

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Templet {
	static Scanner sc;
	static int m,n;//模板的行數  模板生成是給定的變數的個數
	static Map<String,String> map;
	static List<String> list;
	static int index1,index2,index3;
	static String str1,str2,str3,strsrc,strdest,sub;
	public static void main(String[] args) {
		new Templet().run();
	}
    
	public static void run() {
		sc = new Scanner(System.in);
		list = new ArrayList<>();
		map = new LinkedHashMap<>();
		m = sc.nextInt();
		n = sc.nextInt();
		sc.nextLine();
		//對輸入的資料進行儲存  模板用list儲存
		for(int i=0;i<m;i++) {
			list.add(sc.nextLine());
		}
		
		//給定的變數以鍵值對的形式用map儲存
		for(int i=0;i<n;i++) {
			String temp = sc.nextLine();
			int index1 = temp.indexOf(" ");
			String str1 = temp.substring(0,index1);
			String str2 = temp.substring(index1+2, temp.length()-1);			
			map.put(str1, str2);
		}
		
		deal(list,map);
		Iterator<String> iterator = list.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
	}
	
	public static void deal(List<String> lsit,Map<String,String> map) {
		for (int i=0;i<list.size();i++) {
			boolean flag = true;
			while(flag) {
				if(list.get(i).contains("{{")){
		
					index1 = list.get(i).indexOf('{');					
					index2 = list.get(i).indexOf('}');			
					sub = list.get(i).substring(index1+3, index2-1);	//取出標記
					if(map.containsKey(sub)) {   //判斷給定標記中是否包含模板中的標記
						//首先對第一個需要替換的標記進行替換
						strsrc = list.get(i).replaceFirst(sub, map.get(sub));	
						//以下操作取出替換後的{{、}}以及空格
						str1 = strsrc.substring(0, index1);
						index3 = strsrc.indexOf('}');
						str2 = strsrc.substring(index1+3,index3-1);						
						str3 = strsrc.substring(index3+2);
						
						//最終第一個標記替換成功
						strdest = str1+str2+str3;
						list.remove(i);
						list.add(i, strdest);
					} else {
						//如果不包含 那麼不需要替換  只要取出{{、}}以及空格
						str1 = list.get(i).substring(0, index1);				
						str3 = list.get(i).substring(index2+2);						
						strdest = str1+str3;
						list.remove(i);
						list.add(i,strdest);
					}
				} else {
					
					/*
					 * 該行沒有標記 退出while迴圈 判斷下一行  
					 */
					
					break;
				}
			}
			
		}
	}
}