2

我正在使用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);

这解决了问题

4

1 回答 1

1

当你这样做时,name.replaceAll(".", "/")你将全部替换为/. ReplaceAll将正则表达式作为第一个参数,因此您可以匹配所有字符.并将其替换为/.

将您的声明替换为:

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

\\.: 代表字符点。

于 2012-05-31T08:35:16.683 回答