15.蓝桥杯之源码变换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sword_anyone/article/details/89183527

超文本标记语言(即HTML),是用于描述网页文档的一种标记语言。
HTML通过文本来描述文档显示出来应该具有的“样子”。它主要通过标签来定义对象的显示属性或行为。
如果把java的源文件直接拷贝到HTML文档中,用浏览器直接打开,会发现本来整齐有序的源文件变成了一团遭。
这是因为,文本中的许多回车和空格都被忽略了。而有些符号在html中有特殊的含义,引起了更复杂的局面。
为了源文件能正常显示,我们必须为文本加上适当的标签。对特殊的符号进行转义处理。
常用的有:
HTML 需要转义的实体:
& —>&
空格 —> 
< —><

--->>

" —> "
此外,根据源码的特点,可以把 TAB 转为4个空格来显示。
TAB —>    
为了显示为换行,需要在行尾加
标签。
为了显示美观,对关键字加粗显示,即在关键字左右加标签。比如:
public
对单行注释文本用绿色显示,可以使用标签,形如:
//这是我的单行注释!
注意:如果“//”出现在字符串中,则注意区分,不要错误地变为绿色。
不考虑多行注释的问题 /* … / // /* … */

你的任务是:编写程序,把给定的源文件转化为相应的html表达。


package exe11_15;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class Exe15 {

	public static void main(String[] args) {

		InputStream  iStream = null;  
		InputStreamReader  isr = null;
		BufferedReader  br  = null;
		
		PrintWriter  pw = null;
		
		List<String> xiegan = null;
		List<String> maohao = null;

		try {

			File file = new File("a.txt");
			if (!file.exists()) {
				file.createNewFile();   
			}
			iStream = new FileInputStream(file);
			isr = new InputStreamReader(iStream);
			br = new BufferedReader(isr);
			
			File  fileout = new File("b.html");
			if (!file.exists()) {
				file.createNewFile();
			}
			pw = new PrintWriter(fileout);

			String string= br.readLine();
			while(string!=null)
			{
				string = string.replaceAll("	", "&nbsp;&nbsp;&nbsp;&nbsp;");
				string = string.replaceAll(" ", "&nbsp;");
				string = string+"<br/>";
				string = string.replaceAll("public", "<b>public</b>");
				xiegan =  new ArrayList<String>();
				maohao = new ArrayList<String>();
				for (int i = 0; i < string.length(); i++) {
					int n = string.indexOf("//",i);
					if (n==-1) 
						break;
					xiegan.add(n+"");
					i = n;
				}
				for (int i = 0; i < string.length(); i++) {
					int pre = string.indexOf("\"",i);
					int then = string.indexOf("\"", pre+1);
					if (pre==-1) 
						break;
					maohao.add(pre+"");
					maohao.add(then+"");
					i = then;
				}
				for (int i = 0; i < xiegan.size(); i++) {
					int pre = Integer.parseInt(maohao.get(i*2));
					int then = Integer.parseInt(maohao.get(i*2+1));
					
					for (int j = 0; j < xiegan.size(); j++) {
						if (Integer.parseInt(xiegan.get(j))>=pre&&
								Integer.parseInt(xiegan.get(j))<=then) {
							xiegan.remove(j);
							maohao.remove(String.valueOf(i*2));
							maohao.remove(String.valueOf(i*2+1));
							i--;
						}
					}
				}
				if (xiegan.size()!=0) {
					int n = Integer.parseInt(xiegan.get(0));
					string = string.substring(0, n+1)+"<font color=green>"+
					string.substring(n+1)+"</font>";
				}
				pw.write(string);
				System.out.println(string);
				pw.flush();
				string = br.readLine();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if (pw!=null) {
				pw.close();
			}
			if (br!=null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (isr!=null) {   //djfakdjf
				try {
					isr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (iStream!=null) {
				try {
					iStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}


支付宝扫红包,让我能够买杯咖啡,继续创作,谢谢大家!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sword_anyone/article/details/89183527