【问题标题】:JavaParser removes empty linesJavaParser 删除空行
【发布时间】:2022-01-28 06:32:51
【问题描述】:

我正在使用具有以下依赖项的 JavaParser:

<dependency>
  <groupId>com.github.javaparser</groupId>
  <artifactId>javaparser-core</artifactId>
  <version>3.24.0</version>
</dependency>

当我尝试将它与以下类一起使用时(解析自身)...

import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseResult;
import com.github.javaparser.ast.CompilationUnit;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Some comment.
 */
public class JavaParserPlayground {
  public static void main(String[] args) throws IOException {
    // Some comment.
    String source = Files.readString(Paths.get("path\\JavaParserPlayground.java"),
      StandardCharsets.UTF_8);

    // Some comment.
    JavaParser parser = new JavaParser();
    ParseResult<CompilationUnit> parseResult = parser.parse(source);

    // Some comment.
    CompilationUnit unit = parseResult.getResult().orElseThrow();
    System.out.println(unit.toString());
  }
}

...然后我得到以下结果:

import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseResult;
import com.github.javaparser.ast.CompilationUnit;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * Some comment.
 */
public class JavaParserPlayground {

    public static void main(String[] args) throws IOException {
        // Some comment.
        String source = Files.readString(Paths.get("path\\JavaParserPlayground.java"), StandardCharsets.UTF_8);
        // Some comment.
        JavaParser parser = new JavaParser();
        ParseResult<CompilationUnit> parseResult = parser.parse(source);
        // Some comment.
        CompilationUnit unit = parseResult.getResult().orElseThrow();
        System.out.println(unit.toString());
    }
}

我的问题是我需要带有所有原始换行符的原始输出。但它会删除一些空行(在 import 语句之间,方法内),删除换行符(在源分配内)和 adss 空行(在 main 方法之前)。

更多:原始来源有 2 个空格缩进,打印的来源有 4 个空格。

可以强制原代码结构吗?

【问题讨论】:

    标签: java parsing javaparser


    【解决方案1】:

    您想使用 LexicalPreservingPrinter。这是setup 文档。基本上,您可以像这样将它添加到链的末尾(当一切都按预期工作时):

    CompilationUnit lpp = LexicalPreservingPrinter.setup(unit);
    System.out.println(LexicalPreservingPrinter.print(lpp));
    

    【讨论】:

    • 是的,这看起来好多了。非常感谢!!
    猜你喜欢
    • 2019-06-12
    • 2010-10-16
    • 2018-12-20
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    相关资源
    最近更新 更多