微软实习面试-删除一个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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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的设计差异
· 三行代码完成国际化适配,妙~啊~