import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Scanner;
/**
* @author winnie
*
*/
public class DelCommentsInJava {
private static final char SLASH = '/';
private static final char STAR = '*';
private static final char NEWLINE = '\n';
//斜杠
private static final int TYPE_SLASH = 1;
//星号
private static final int TYPE_STAR = 2;
// 双斜杠类型的注释
private static final int TYPE_DSLASH = 3;
// /*的注释
private static final int TYPE_STAR_SLASH = 4;
public static char[] del(char[] _target, int _start, int _end) {
char[] tmp = new char[_target.length - (_end - _start + 1)];
System.arraycopy(_target, 0, tmp, 0, _start);
System.arraycopy(_target, _end + 1, tmp, _start, _target.length - _end
- 1);
return tmp;
}
public static String delComments(String _target) {
int preType = 0;
int cur = -1, token = -1;
char[] input = _target.toCharArray();
for (cur = 0; cur < input.length; cur++) {
if (input[cur] == SLASH) {
if (preType == TYPE_STAR_SLASH) {
if(input[cur-1] == STAR)
{
input = del(input, token, cur);
cur = token - 1;
preType = 0;
}else {
preType = TYPE_STAR_SLASH;
}
} else if (preType == TYPE_SLASH) {
token = cur - 1;
if(input[token] == SLASH)
{
//token = cur - 1;
preType = TYPE_DSLASH;
}
} else if (preType == TYPE_DSLASH){
preType = TYPE_DSLASH;
} else {
preType = TYPE_SLASH;
}
} else if (input[cur] == STAR) {
if(preType == TYPE_STAR_SLASH){
preType = TYPE_STAR_SLASH;
}
else if (preType == TYPE_SLASH) {
if(input[cur-1] == SLASH){
token = cur - 1;
preType = TYPE_STAR_SLASH;
}else{
preType = TYPE_STAR;
}
}else if (preType == TYPE_DSLASH) {
preType = TYPE_DSLASH;
} else{
preType = TYPE_STAR;
}
} else if(input[cur] == NEWLINE)
{
if(preType == TYPE_DSLASH)
{
input = del(input, token, cur-1);
cur = token - 1;
preType = 0;
}
}
}
return new String(input);
}
public static void main(String[] args) {
try {
Scanner sc =new Scanner(System.in);
System.out.println("输入目录:");
String dirname = sc.next();
File dir = new File(dirname);
File[] listfile = dir.listFiles();
for(int i = 0;i<listfile.length;i++)
{
BufferedReader reader = new BufferedReader(new FileReader(listfile[i]));
StringBuilder content = new StringBuilder();
String tmp = null;
while ((tmp = reader.readLine()) != null) {
content.append(tmp);
content.append("\n");
}
String target = content.toString();
String target1 = delComments(target);
File f = new File(listfile[i]+".bak");
BufferedWriter outputbak = new BufferedWriter(new FileWriter(f));
outputbak.write(target);
outputbak.close();
BufferedWriter output = new BufferedWriter(new FileWriter(listfile[i]));
output.write(target1);
output.close();
}
} catch (Exception e) {
}
}
}
分享到:
相关推荐
标题中提到的"js压缩工具"是一种专门针对JavaScript文件进行优化的工具,它可以将单个或多个JavaScript文件合并并压缩,消除其中的空白、注释和不必要的字符,同时进行代码混淆,使文件更紧凑,加载更快。...
3. **删除注释**:如果需要删除某个注释,用户可以提供相应的标识或索引来定位要删除的注释。Notes-App会找到对应的注释对象并从JSON文件中移除,然后更新文件内容。 4. **列举注释**:Notes-App还支持列举所有存储...
JavaScript代码压缩工具是Web开发中不可或缺的一部分,它们主要用于减少JavaScript文件的大小,从而提高网页加载速度,节省带宽,优化用户体验。在这个过程中,JavaScript代码压缩工具通过删除不必要的空格、换行符...
本项目"原创实用无限级js梅花树目录"正是一种这样的解决方案,它利用JavaScript(js)和层叠样式表(css)技术来创建一个无限层级的目录树,呈现出梅花形状的视觉效果。这个项目不仅具有创新性,而且具有实用性,...
当用户完成阅读或不再需要某个PDF时,应用应提供一个选项来删除文件。这同样涉及到文件系统的操作,通过删除指定路径的文件即可实现。 实现"项目各种需求"可能包括但不限于以下几点: 1. **权限管理**:确保只有...
8. `easyUpload.js` 是核心的JavaScript文件,包含了实现批量上传逻辑的函数和事件处理程序。通过阅读源码,我们可以深入理解其实现机制,包括文件选择、队列管理、异步上传等部分。 9. `font` 和 `img` 目录可能...
在IT行业中,优化网站性能是至关重要的,其中一项关键技术就是对JavaScript(JS)和Cascading Style Sheets(CSS)进行压缩和混淆。本实例源码"JS和CSS压缩混淆 JsCompressor.zip"提供了基于Java实现的工具,用于...
在给定的“EjerjcicioJS”练习中,提到的“JavaScript的第5条注释”可能是指一个特定的代码段或者练习的某个关键部分。在JS中,有多种注释方式,包括单行注释和多行注释,它们都不会被JavaScript引擎执行,仅用于...
-->`在不支持JS的浏览器中被忽略,而在支持的浏览器中执行,但若注释与语句在同一行,该语句不会执行。 JavaScript的数据类型包括: 1. 数字型:支持infinity和NaN。 2. 字符串型。 3. 布尔型。 4. 特殊类型:...
2. **查看差异**: 在编辑器中查看代码的添加、删除和修改,直观地理解PR带来的变化。 3. **直接编辑注释**: 在本地环境中直接回复评论,提高了沟通效率。 4. **代码高亮与提示**: 利用Atom的优秀代码高亮和自动补全...
- JavaScript文件:包含了实现日历功能的脚本,包括事件处理、DOM操作、日期处理等逻辑。 - 可能还会有注释文件或者README,提供了关于如何使用和定制日历控件的指导。 学习这个日历控件,你可以了解到如何将...
删除ini文件中的某个键值对,需要读取文件,移除指定的键值对,然后重新写入文件。如果要删除整个节,操作更为复杂,可能需要处理节的嵌套关系。 ### 查找ini文件内容 查找ini文件中的特定键值对,可以在解析ini...
在压缩包文件`javascript-obfuscator-javascript-obfuscator-adb5f4e`中,可能包含了JavaScript Obfuscator的源码或者特定版本的二进制文件。这个文件名的格式通常表示这是一个Git仓库的某个特定提交哈希,意味着你...
根据提供的文件信息,我们可以推断出这是一本关于JavaScript DOM编程技术的书籍——《JavaScript DOM编程艺术(第2版)》。尽管实际书籍内容并未给出,但从标题、描述及部分链接信息来看,这本书主要涉及JavaScript...
如果这个项目是关于软件开发的,那么这个提示可能存在于某个配置文件或源代码文件中,用于在特定情况下启用行号显示。例如,这可能是调试配置文件的一部分,或者是在编译时控制是否生成行号信息的标志。 总的来说,...
在JavaScript(JS)编程中,实现淘宝手机购买选项的功能是一项常见的任务,这涉及到前端交互设计以及数据处理。这个"JS淘宝手机购买选项代码.zip"压缩包包含了一个示例,用于展示如何在移动电商平台上创建一个商品...
- **外部式**:将JavaScript代码写在一个单独的.js文件中,并通过`<script src="yourfile.js"></script>`标签引用该文件。 #### 2. 预测以下代码片段的输出结果: ```javascript var str; alert(typeof str); ``` ...
例如,使用像UglifyJS或Terser这样的工具,可以自动处理JavaScript文件的压缩工作。 混淆则是将代码转化为难以阅读的形式,它不仅压缩代码,还更改变量和函数名称为无意义的短字符串,以增加代码的保密性。虽然这...
1. **下载与解压**:首先,你需要从可靠的源下载YUI Compressor的压缩包,并将其解压到本地计算机上的某个目录。 2. **安装**:找到解压后的文件夹,双击运行"install.cmd"。这个批处理脚本会修改系统注册表,将YUI...
- 查看文件中使用:用于查找在当前文件中某个类、方法或变量的使用情况。 2. 编译和运行: - Make Project(编译修改和依赖):编译项目中修改过的文件和它们的依赖。 - 编译选定的文件/包/模块:仅编译选中的...