备考蓝桥杯(7)源码转换 java实现
2018-03-29 17:53
288 查看
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)
相关文章推荐
- 备考蓝桥杯(10)矩阵旋转 java实现
- 备考蓝桥杯(1)算式☆☆☆ + ☆☆☆ = ☆☆☆ java 实现(全排列)
- 备考蓝桥杯(23)G将军准备敢死队 java实现
- 备考蓝桥杯(18)方格填数 java实现
- 备考蓝桥杯(29)基因牛的繁殖java实现
- 备考蓝桥杯(16)包子问题 java实现
- 备考蓝桥杯(6)纵横火柴游戏 java实现
- 备考蓝桥杯(34)泊松汾酒java实现exeforward
- 备考蓝桥杯(13)顺时针螺旋填入矩阵 java实现
- 备考蓝桥杯(27)迷宫走法(java实现)
- 识别常见编码格式文件并转换成UTF-8编码 的java实现 源码
- 备考蓝桥杯(14)playfair加密java实现
- 备考蓝桥杯(30)奇怪的比赛java实现(exeforward)
- 备考蓝桥杯(17)K倍区间 java实现
- 备考蓝桥杯(12)输入日期 java实现
- 备考蓝桥杯(26)漏掉的账单明细,(遍历所有情况)(java实现)(exforward)
- 备考蓝桥杯(8)取球博弈 java实现
- 备考蓝桥杯(38)迭代器输出java实现
- 备考蓝桥杯(9)密码转换器 java实现
- 备考蓝桥杯(19)方格填数(DFS) java实现