Java:使用diagnostics.getDiagnostics()查找错误

时间:2012-05-30 16:48:30

标签: java compiler-construction

我正在使用java创建一个编译器程序,我有它编译java文件,我让它找出发生了什么错误以及它发生在哪一行。我的问题是,当它打印出这些信息时,我在输出的中间加载了///////////,我不明白为什么会这样!

我的输出是

Error on line 4 in ////////////////////////////////////////////////////////////////////////////////////////////.java:4: error: class ToCompileTwo is public, should be declared in a file named ToCompileTwo.java
public class ToCompileTwo {

这是我用于显示的代码

for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
            System.out.format("Error on line %d in %s", diagnostic.getLineNumber(), diagnostic);
        }

修改

我设法修复此问题,以下方法是创建////////

的方法
protected DynamicJavaSourceCodeObject(String name, String code) {
    super(URI.create("string:///" + name.replaceAll(".", "/") + Kind.SOURCE.extension), Kind.SOURCE);
    this.qualifiedName = name;
    this.sourceCode = code;
}

我将第二行更改为

super(URI.create("string:///" + name.replaceAll("\\\\", "/") ), Kind.SOURCE);

这解决了问题

1 个答案:

答案 0 :(得分:1)

当您执行name.replaceAll(".", "/")时,请按/替换所有内容。 ReplaceAll将正则表达式作为第一个参数,因此您将所有字符与.匹配,并将其替换为/

将您的陈述替换为:

name.replaceAll("\\.", "/")

\\.:代表角色点。