• Java流的简单使用:读取文件、写入文件(面试题:删除注释代码)


    摘要:前天面试Android时遇到机试,题目是删除注释中的代码。机试开始时不能上网,我恰好忘了读写字符流的相关代码API,幸好后来能上网查关于流的API,最终得以把程序写出来。

     

    题目:请编程将Example.c文件中的所有注释删除,将结果写入Example.i文件中。

    输入用例Example.c:

    struct a {
        char a /*2392839238923 /*kasdlfjasld*/;
        char b; //23232392839
    };
    /*
    askdashfla'
    asdfalskdfhlksafdhla
    fasdjfhalsdjfhlasdf
    askjdfhlkajds
    * /
     */
    void Function(int param /*232323* / */)
    { 
        //*2323234234l
        int i = 1;//2923939
        char str[] = "/*232323";
        int j = 0;
        i = i / j * i;
        strcpy(str, "/*lakjslkdflksd*/");
    }

    我编写的程序:

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Test {
        public static void main(String args[])
        {
            String InputPath="../Example_1.c";
            String OutputPath="../Example_1.i";
            
            String Data=LoadFile(InputPath);
            Data=Handle(Data);
    
            WriteFile(Data,OutputPath);
        }
        
        //把文件中的数据转化为字符串
    
        private static String LoadFile(String path)
        {
            File file = new File(path);
            BufferedReader reader=null;
            String temp;
            String result="";
            
            
            try {
                reader =new BufferedReader(new FileReader(file));
                
                while((temp=reader.readLine())!=null)
                {
                    result=result+temp+"\r\n";
                }
            } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(result);    
            return result;
        }
        
        //把数据写进文件
        private static void WriteFile(String data,String path)
        {
            try {
                FileWriter fw=new FileWriter(path);
                BufferedWriter bw=new BufferedWriter(fw);
    
                bw.write(data);
                
                bw.close();
                fw.close();
                
                
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return;
        }
        
        //删掉注释的方法
        private static String Handle(String data)
        {
            StringBuffer sb= new StringBuffer();
            int posStar = 0,posEnd=0,i=0;
            while(i<data.length())
            {
                System.out.print(data.charAt(i));
                if(data.charAt(i)=='"')
                {
                    do
                    {
                        sb.append(data.charAt(i));
                        i++;
                    }while(data.charAt(i)!='"');
                    sb.append(data.charAt(i));
                    i++;
                    continue;
                }
                else if(data.charAt(i)=='/')
                {
                    if(data.charAt(i+1)=='/')
                    {
                        do
                        {
                            i++;
                        }while(data.charAt(i)!='\r');
                        sb.append(data.charAt(i));
                        i++;
                        continue;
                    }
                  
                    else if(data.charAt(i+1)=='*')
                    {
                        
                        do
                        {
                            i++;
                        }while(data.charAt(i)!='*'||((data.charAt(i)=='*')&&(data.charAt(i-1)=='/')));
                        do
                        {
                            i++;
                        }while(data.charAt(i)!='/');
                        
                        i++;
                        posStar=i;
                        continue;
                    }
                }
                else if(data.charAt(i)=='*')                
                {
                    if(data.charAt(i+1)=='/')
                    {
                        
                        posEnd=i;
                        i=i+2;
                        System.out.println(posStar+" "+posEnd+" "+sb.length());
                        sb.delete(sb.length()-(posEnd-posStar), sb.length());
                        continue;
                    }
                    else
                    {
                        while(data.charAt(i+1)==' ')
                        {
                            sb.append(data.charAt(i));
                            i++;
                            
                        }
                        if(data.charAt(i+1)=='/')
                        {
                            posEnd=i;
                            i=i+2;
                            sb.delete(sb.length()-(posEnd-posStar), sb.length());
                            continue;
                        }
                        else{
                            continue;
                        }
                    }
                }
                sb.append(data.charAt(i));
                i++;
            }
            return new String(sb);
        }
        
    }

    输出结果:

    struct a {
        char a ;
        char b; 
    };
    
    void Function(int param )
    { 
        
        int i = 1;
        char str[] = "/*232323";
        int j = 0;
        i = i / j * i;
        strcpy(str, "/*lakjslkdflksd*/");
    }

    还有更好的答案吗?望共同探讨。

  • 相关阅读:
    java导出pdf格式文档
    本地文件夹选择框
    将文件解除占用
    Windows 进入上帝模式窗口
    Windows 10 系统获取密钥方法
    CentOS7 systemctl 命令
    一键立即息屏
    定时关闭程序
    CentOS 7 FTP的安装与配置
    SQL基础
  • 原文地址:https://www.cnblogs.com/TseChiHoi/p/2696606.html
Copyright © 2020-2023  润新知