CCF-模板生成系统-Java

本文介绍了一个使用Java实现的模板引擎,通过读取用户输入的模板和变量,将变量值替换到模板中的占位符,实现了动态生成文本的功能。文章详细展示了如何使用Scanner类读取输入,如何利用ArrayList和LinkedHashMap存储数据,以及如何遍历和处理这些数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
				}
			}
			
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值