微软实习面试-删除一个JAVA文件的全部注释

描述:删除一个合法的JAVA文件的全部注释,注释以"//"或者"/* */"表示。

注意: 单引号或者双引号内的文字可能包括"//"或者"/* */",但不是注释的部分。

解法:读入文件后,一个字符一个字符的处理。

复制代码
 1 public void deleteAllComment(InputStream is) throws IOException {
 2         int i = is.read();
 3         while(i != -1) {
 4             char c = (char)i;
 5             if(c == '/') {
 6                 char j = (char)is.read();
 7                 if(j == '/') {
 8                     deleteThisLine(is);
 9                 } else if(j == '*') {
10                     deleteUntilEnd(is);
11                 }
12             } else if(c == '\'' || c == '"') {
13                 echoString(is, c);
14             } else {
15                 System.out.print(c);
16             }
17             i = is.read();
18         }
19     }
20     
21     //删除以"//"开头的注释
22     private void deleteThisLine(InputStream is) throws IOException {
23         char i = (char)is.read();
24         char j = (char)is.read();
25         while(true) {
26             if(i == '\r' && j=='\n') {
27                 break;
28             } else {
29                 i = j;
30                 j = (char)is.read();
31             }
32         }
33     }
34     
35     //删除以"/* */"表示的注释
36     private void deleteUntilEnd(InputStream is) throws IOException {
37         char i = (char)is.read();
38         char j = (char)is.read();
39         while(true) {
40             if(i == '*' && j=='/') {
41                 break;
42             } else {
43                 i = j;
44                 j = (char)is.read();
45             }
46         }
47     }
48     
49     //原样输出单引号或者双引号中的内容
50     private void echoString(InputStream is, int start) throws IOException {
51         char end = (char)is.read();
52         while(end != start) {
53             System.out.print(end);
54             end = (char)is.read();
55         }
56     }
posted @   剑芒  阅读(166)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示