如何在Java中插入,替换和删除文件的区域?

我正在寻找一个实现类(Java),它处理现有文件的插入,替换和删除文本,就像StringBuilder一样。如何在Java中插入,替换和删除文件的区域?

我不想使用StringBuilder的原因是我想避免在内存中拥有所有文件内容。

目的是将补丁应用于包含任何编程语言代码的文件。

回答:

一般来说,一个班级应该做一件事,做得很好。

这意味着您不太可能会找到一个读取代码的类,将其转换为内部表示(解析树),检测手头的问题,更改内部表示并将内部表示写回出到磁盘。

考虑到这一点,有很多项目可以扩展以添加所需的功能。

Checkstyle解析Java代码,旨在报告文体错误。为此,它必须读取代码,将其转化为内部表示,并检测(格式化)问题。这可能是一个很好的起点,取决于你的目标。

PMD是一个静态代码分析工具。为了找到Java源代码中的问题,它必须:阅读代码,将其转化为内部表示,并检测(结构性)问题。

请注意,这些工具都不会做你想做的一切;但是,他们很接近。您只需构建一个在解析树上运行的“修复程序”,即可修复检测到的问题。然后,您将需要查找该工具是否提供了一个“输出器”,用于从内部解析(树)表示中重构代码的文本,并使用它来生成所需的文本,然后将其保存到磁盘。

如果树到文本模块不存在,您可能必须编写它。

源代码受制于规则,尽管您可能认为不需要这些额外的步骤,但您的代码的寿命会比跳过这些步骤的寿命长得多。只需粘贴一行代码可能对意外输入没有意义。例如,假设您的@Overrides标签添加到Java方法,这个伪代码将失败

currentLine = next(); 

if (currentLine.detectMethod() and isAnOverride(currentLine().getMethod())) {

code.insertBefore(currentline, "@Overrides");

}

因为有人会养活你的代码,这

public 

void

myMethod(

String one,

String two,

String three)

{

System.out.println("Haha! I broke you!");

}

可能导致

public 

void

@Overrides

myMethod(

String one,

String two,

String three)

{

System.out.println("Haha! I broke you!");

}

你可以说:“好吧,没有人应该那样做!”但是,如果语言允许,那么你会与语言本身不一致。

如果你不相信我,逐行处理器不会检测到“public”作为方法,也不会检测“void”作为方法,但会检测到“myMethod(”作为( misidentified)包私有多行方法

以上是 如何在Java中插入,替换和删除文件的区域? 的全部内容, 来源链接: utcz.com/qa/265586.html

回到顶部