@zsh-o
2018-07-05T08:53:40.000000Z
字数 1994
阅读 2089
算法
这个任务是要删除java文件中所有的注释,采取的方法为构建自动机判断当前字符是否应该删除,自动机图示如下,需要注意的是程序里面的字符串的内容会有影响例如包含", //等,要点是要判断正确,要涉及到所有情况
转换成代码如下
//import java.util.Scanner;import java.io.File;import java.io.FileWriter;import java.io.BufferedReader;import java.io.FileReader;import java.io.PrintWriter;//import java.io.FileNotFoundException;import java.io.IOException;public class CommentRemoval {public static void main(String[] args){String inpath = "E:/workstation/github/Computer_Algorithms/OJs/others/SampleClass.java";String outpath = inpath.substring(0, inpath.length() - 4) + "txt";try{File infile = new File(inpath);File outfile = new File(outpath);if(infile.isFile() && infile.exists()){BufferedReader bufferedReader = new BufferedReader(new FileReader(infile));PrintWriter bufferedWriter = new PrintWriter(new FileWriter(outfile));char c;int i;while((i = bufferedReader.read()) != -1){// state 0c = (char)i;if(c == '/'){ // state 3i = bufferedReader.read();c = (char)i;if(c == '*'){ // state 4while((i = bufferedReader.read()) != -1){c = (char) i;if(c == '*'){ // state 6i = bufferedReader.read();c = (char)i;if(c == '/'){break;}else{continue;}}else{continue;}}}else if(c == '/'){ // state 5while((i = bufferedReader.read()) != -1){c = (char)i;if(c == '\n'){bufferedWriter.print(c);break;}else{continue;}}}else{bufferedWriter.print("/" + c);continue;}}else if(c == '"'){ // state 1bufferedWriter.print(c);while((i = bufferedReader.read()) != -1){c = (char)i;bufferedWriter.print(c);if(c == '\\'){ // state 2if((i = bufferedReader.read()) != -1){c = (char)i;bufferedWriter.print(c);if(c == '"'){continue;}}}else if(c == '"'){break;}}}else{bufferedWriter.print(c);}}bufferedWriter.close();bufferedReader.close();}} catch (IOException e) {e.printStackTrace();}}}
结果:
/* Comment: This is a sample class for testing commentremoval.Jianzhong Qi, 01 May 2016*//** //fff* "fffff"*/import java.util.Scanner;public class SampleClass{public static void main(String[] args) {// Print a "fff" messageSystem.out.print("Hello // stude\"nts."); // haha /* haha}}
import java.util.Scanner;public class SampleClass{public static void main(String[] args) {System.out.print("Hello // stude\"nts.");}}