CCF-模板生成系統-Java
阿新 • • 發佈:2018-12-16
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; } } } } }