栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中的语法检查

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的语法检查

从Java
6开始,您可以使用JavaCompiler编译文本并取回Diagnostic对象,这些对象将告诉您文件有什么问题(如果有)。因此,对于您的示例,您需要获取编辑器的内容并将其传递给JavaCompiler,运行它,并报告所有问题。以下示例假定将编辑器文本写到文件中。

示例代码:

档案检查

public class HelloBuggyWorld {    String test // missing a semicolon    public static void main (String [] args) {        System.out.println('Hello World!');  // should be double quoted    }}

检查器

import java.util.ArrayList;import java.util.Arrays;import java.util.Formatter;import java.util.List;import java.util.Locale;import javax.tools.Diagnostic;import javax.tools.DiagnosticCollector;import javax.tools.JavaCompiler;import javax.tools.JavaFileObject;import javax.tools.StandardJavaFileManager;import javax.tools.ToolProvider;public class JavaSyntaxChecker {    public static void main(String[] args) {        System.out.println(JavaSyntaxChecker.check("/path/to/HelloBuggyWorld.java"));    }    public static List<String> check(String file) {        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);        Iterable<? extends JavaFileObject> compilationUnits =     fileManager.getJavaFileObjectsFromStrings(Arrays.asList(file));        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();        compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits).call();        List<String> messages = new ArrayList<String>();        Formatter formatter = new Formatter();        for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { messages.add(diagnostic.getKind() + ":t Line [" + diagnostic.getLineNumber() + "] t Position [" + diagnostic.getPosition() + "]t" + diagnostic.getMessage(Locale.ROOT) + "n");        }        return messages;    }}

输出量

从运行

main
方法。

[ERROR:  Line [5]    Position [124] HelloBuggyWorld.java:5: unclosed character literal, ERROR:     Line [5]    Position [126] HelloBuggyWorld.java:5: ';' expected, ERROR:     Line [5]    Position [131] HelloBuggyWorld.java:5: not a statement, ERROR:     Line [5]    Position [136] HelloBuggyWorld.java:5: ';' expected, ERROR:     Line [5]    Position [137] HelloBuggyWorld.java:5: unclosed character literal]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号