我正在使用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);
这解决了问题
答案 0 :(得分:1)
当您执行name.replaceAll(".", "/")
时,请按/
替换所有内容。 ReplaceAll将正则表达式作为第一个参数,因此您将所有字符与.
匹配,并将其替换为/
。
将您的陈述替换为:
name.replaceAll("\\.", "/")
\\.
:代表角色点。