java实现一个语法检查器_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 check(String file) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
Iterable extends JavaFileObject> compilationUnits =
fileManager.getJavaFileObjectsFromStrings(Arrays.asList(file));
DiagnosticCollector diagnostics = new DiagnosticCollector();
compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits).call();
List messages = new ArrayList();
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;
}
}
产量
从运行主方法.
[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
]
java实现一个语法检查器_Java语法检查相关推荐
- 用java制作一个简易抽签器
最近闲来无事,想用Java编写一个随机抽签器,最终编写后的运行结果是这样的 下面说一下怎么具体实现,非常简单. 首先,要想出现这个滚动标签,首先必须要有一个窗口来承载它,所以要在main()方法中创建 ...
- java 8流自定义收集器_Java 8编写自定义收集器简介
java 8流自定义收集器 Java 8引入了收集器的概念. 大多数时候,我们几乎不使用Collectors类中的工厂方法,例如collect(toList()) , toSet()或其他更有趣的方法 ...
- java课程设计-音乐播放器_java课程设计---java音乐播放器.doc
java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...
- java编写一个文件查找器
我们学过文件File之后就想写一个文件搜索器我写了两个版本的搜索器,第一个是基于控制台的就是我的查找结果要显示在控制台上,这个比较适合初学者学习,另外我又写了一个基于界面的文件搜索器,用起来比较好看, ...
- java中if结构用图表示_Java语法 | if选择结构 | 创作者训练营
前言 C: 上一篇我们介绍了流程控制语句的概念,本篇我们要正式开始学习其中的选择控制语句.那么在 Java 中,如果要实现选择控制语句有哪些语法呢? 本篇我们就来看看其中,在以后用的最多的一种选择结构 ...
- java中if结构用图表示_Java语法基础之选择结构的if语句、switch语句详解
[前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...
- java的基础语法是什么_java语法基础
java语法基础 引导语:作为一门计算机语言,Java也是有语法的,以下是百分网小编分享给大家的java语法基础,欢迎阅读! java语法基础: 1,关键字:其实就是某种语言赋予了特殊含义的单词. 保 ...
- java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
长得像,但却是两个物种,不过可以让他们表现得近似. Python 的装饰器正如他的名称,很直白,就是实现了装饰器模式(的一个语法糖).@部分对应一个返回为函数的函数,可以对目标函数进行输入.输出过滤, ...
- java实现一个单例设计模式_Java正确实现一个单例设计模式的示例
Java正确实现一个单例设计模式的示例 发布于 2021-1-12| 复制链接 分享一篇关于关于Java正确实现一个单例设计模式的示例,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的 ...
最新文章
- 基于Struts 2的自定义类型转换器
- 计算机上没有启动程序怎么办,Win7开机不加载启动项怎么办
- matlab guide对话框+滑动条+弹出式菜单+列表框的使用
- 从零开始的linux 第五章
- HDU-1501-Zipper
- MySQL数据库优化的几种方式
- 山科大离散数学期末考试_离散数学期末考试含答案
- php微信开发视频教程_PHP微信开发视频资源推荐
- 可视化机器学习工具软件的比较分析研究
- idea错误:否则 JavaFX 应用程序类必须扩展javafx.application.Application
- 计算一元二次方程的解
- 区块如何防篡改_一种区块链防篡改技术的优化方法与流程
- 如何给excel添加开发者选项
- ALCOA+CCEA原则(数据完整性标准)
- 随笔杂记(十)——C++:C4996报错解决方法
- 了解 Fetch API
- (Sentinel-2A、Sentinel-2B)2017年全年中国地区数据
- DOTS支持的shader
- 防抄板加密芯片ALPU笔记
- 怎样给音乐变速变调调音?不妨试试这些变声变调方法