备考蓝桥杯(7)源码转换 java实现

package pers.robert.lanqiaobeizhenti129;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

/**
 * 15.源码变换
超文本标记语言(即HTML),是用于描述网页文档的一种标记语言。
HTML通过文本来描述文档显示出来应该具有的“样子”。它主要通过标签来定义对象的显示属性或行为。
如果把java的源文件直接拷贝到HTML文档中,用浏览器直接打开,会发现本来整齐有序的源文件变成了一团遭。
这是因为,文本中的许多回车和空格都被忽略了。而有些符号在html中有特殊的含义,引起了更复杂的局面。
为了源文件能正常显示,我们必须为文本加上适当的标签。对特殊的符号进行转义处理。
常用的有:
HTML 需要转义的实体:
&     --->&
空格         ---> 
<     ---><
>     --->>
"     --->  "
此外,根据源码的特点,可以把 TAB 转为4个空格来显示。
TAB   --->    
为了显示为换行,需要在行尾加<br/>标签。
为了显示美观,对关键字加粗显示,即在关键字左右加<b>标签。比如:
<b>public</b>
对单行注释文本用绿色显示,可以使用<font>标签,形如:
<font color=green>//这是我的单行注释!</font>
注意:如果“//”出现在字符串中,则注意区分,不要错误地变为绿色。
不考虑多行注释的问题 /* .... */ 	/*或*/ 	/** .... 

你的任务是:编写程序,把给定的源文件转化为相应的html表达。
【输入、输出格式要求】
与你的程序同一目录下,存有源文件 a.txt,其中存有标准的java源文件。要求编写程序把它转化为b.html。
例如:目前的 a.txt 文件与 b.html 文件就是对应的。可以用记事本打开b.html查看转换后的内容。用浏览器打开b.html则可以看到显示的效果。
注意:实际评测的时候使用的a.txt与示例是不同的。

 * @author Robert
 *
 */
public class The015ChangeSourCodeDemo1 {

	private String BoldComments(String tempString, String note) {
		return null;
	}
	public static void main(String[] args) {
		try {
//			File inFile = new File("D:/MyEclipseworkspace/algorithm/src/pers/robert/lanqiaobeizhenti129/test.java");
			File inFile = new File("src/pers/robert/lanqiaobeizhenti129/test.java");
			FileInputStream fileInputStream;
			fileInputStream = new FileInputStream(inFile);
			InputStreamReader inputStreamReader = new InputStreamReader(
					fileInputStream);
			BufferedReader bufferedReader = new BufferedReader(
					inputStreamReader);
			File outFile = new File("src/pers/robert/lanqiaobeizhenti129/test.html");
//			File outFile = new File("D:/MyEclipseworkspace/algorithm/src/pers/robert/lanqiaobeizhenti129/test.html");
			FileOutputStream fileOutputStream = new FileOutputStream(outFile);
			OutputStreamWriter outStreamWriter = new OutputStreamWriter(
					fileOutputStream);
			BufferedWriter bufferedWriter = new BufferedWriter(outStreamWriter);
			outStreamWriter.write("<html>\n");
			outStreamWriter.write("<body>\n");
			String tempString;
			while ((tempString = bufferedReader.readLine()) != null) {
				tempString = tempString.replaceAll("&", "&");
				tempString = tempString.replaceAll(" ", " ");
				tempString = tempString.replaceAll("<", "<");
				tempString = tempString.replaceAll(">", ">");
				int index1 = tempString.lastIndexOf("//");
				int index2 = tempString.indexOf("\"");
				if (index1 != -1 && index2 == -1) {
					String s1 = tempString.substring(0, index1);
					String s2 = tempString.substring(index1);
					s2 = "<font color=green>" + s2 + "</font>";
					tempString = s1 + s2;
				} else if (index1 != -1 && index2 != -1) {
					int startMark = -1, endMark = -1;
					boolean isNote = true;
					for (int i = 0; i < tempString.length(); i++) {
						if ('\"' == tempString.charAt(i)) {
							if (startMark == -1) {
								startMark = i;
							} else {
								endMark = i;
								//判断是否在引号里面,如果在的话就不变色了
								if (index1 > startMark && index1 < endMark) {
									isNote = false;
									break;
								} else {
									startMark = -1;
									endMark = -1;
								}
							}
						}
					}
					if (isNote == true) {
						String s1 = tempString.substring(0, index1);
						String s2 = tempString.substring(index1);
						s2 = "<font color=green>" + s2 + "</font>";
						tempString = s1 + s2;
					}
				}
				tempString = tempString.replaceAll("\"", """);
				tempString = tempString.replaceAll("\t",
						"    ");
				tempString = tempString.replaceAll(" public ",
						" <b>public</b> ");
				tempString = tempString.replaceAll("public ",
						"<b>public</b> ");
				tempString = tempString.replaceAll(" class ",
						" <b>class</b> ");
				tempString = tempString.replaceAll(" static ",
						" <b>static</b> ");
				tempString = tempString.replaceAll(" void ",
						" <b>void</b> ");
				outStreamWriter.write(tempString + "<br/>" + "\r\n");
			}
			outStreamWriter.write("\n</body>\n");
			outStreamWriter.write("</html>\n");
			bufferedWriter.flush();
			bufferedReader.close();
			bufferedWriter.close();
			System.out.println("success");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


}

分析:1.使用绝对路径和相对路径来读入和输出文件

		File inFile = new File("D:/MyEclipseworkspace/algorithm/src/pers/robert/lanqiaobeizhenti129/test.java");
			File inFile = new File("src/pers/robert/lanqiaobeizhenti129/test.java");
	

2.读入过程:

File file = new File("path")

-->FileInputStream fileInputStream = new FileInputStream(file)

-->new InputStreamReader(fileInpuStream)

-->new BufferedReader(inputStreamReader)

3.写入过程:

File outFile = new File(path);
--> FileOutputStream fileOutputStream = new FileOutputStream(outFile);

-->OutputStreamWriter outStreamWriter = new OutputStreamWriter(fileOutputStream);

-->BufferedWriter bufferedWriter = new BufferedWriter(outStreamWriter);

4.

bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
while ((tempString = bufferedReader.readLine()) != null)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值