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语法检查相关推荐

  1. 用java制作一个简易抽签器

    最近闲来无事,想用Java编写一个随机抽签器,最终编写后的运行结果是这样的 下面说一下怎么具体实现,非常简单. 首先,要想出现这个滚动标签,首先必须要有一个窗口来承载它,所以要在main()方法中创建 ...

  2. java 8流自定义收集器_Java 8编写自定义收集器简介

    java 8流自定义收集器 Java 8引入了收集器的概念. 大多数时候,我们几乎不使用Collectors类中的工厂方法,例如collect(toList()) , toSet()或其他更有趣的方法 ...

  3. java课程设计-音乐播放器_java课程设计---java音乐播放器.doc

    java课程设计---java音乐播放器 Java程序设计课程设计 题 目 java音乐播放器 学 号: 姓 名: 指导教师: 完成时间: 目 录 第一章 系统概述3 1.需求分析3 1.1任务目的: ...

  4. java编写一个文件查找器

    我们学过文件File之后就想写一个文件搜索器我写了两个版本的搜索器,第一个是基于控制台的就是我的查找结果要显示在控制台上,这个比较适合初学者学习,另外我又写了一个基于界面的文件搜索器,用起来比较好看, ...

  5. java中if结构用图表示_Java语法 | if选择结构 | 创作者训练营

    前言 C: 上一篇我们介绍了流程控制语句的概念,本篇我们要正式开始学习其中的选择控制语句.那么在 Java 中,如果要实现选择控制语句有哪些语法呢? 本篇我们就来看看其中,在以后用的最多的一种选择结构 ...

  6. java中if结构用图表示_Java语法基础之选择结构的if语句、switch语句详解

    [前言] 流程控制语句: 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的.也就是说程序的流程对运行结果有直接的影响.所以,我们必须清楚每条语句的执行流程.而且,很多时候我们要通过 ...

  7. java的基础语法是什么_java语法基础

    java语法基础 引导语:作为一门计算机语言,Java也是有语法的,以下是百分网小编分享给大家的java语法基础,欢迎阅读! java语法基础: 1,关键字:其实就是某种语言赋予了特殊含义的单词. 保 ...

  8. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?

    长得像,但却是两个物种,不过可以让他们表现得近似. Python 的装饰器正如他的名称,很直白,就是实现了装饰器模式(的一个语法糖).@部分对应一个返回为函数的函数,可以对目标函数进行输入.输出过滤, ...

  9. java实现一个单例设计模式_Java正确实现一个单例设计模式的示例

    Java正确实现一个单例设计模式的示例 发布于 2021-1-12| 复制链接 分享一篇关于关于Java正确实现一个单例设计模式的示例,小妖觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的 ...

最新文章

  1. 基于Struts 2的自定义类型转换器
  2. 计算机上没有启动程序怎么办,Win7开机不加载启动项怎么办
  3. matlab guide对话框+滑动条+弹出式菜单+列表框的使用
  4. 从零开始的linux 第五章
  5. HDU-1501-Zipper
  6. MySQL数据库优化的几种方式
  7. 山科大离散数学期末考试_离散数学期末考试含答案
  8. php微信开发视频教程_PHP微信开发视频资源推荐
  9. 可视化机器学习工具软件的比较分析研究
  10. idea错误:否则 JavaFX 应用程序类必须扩展javafx.application.Application
  11. 计算一元二次方程的解
  12. 区块如何防篡改_一种区块链防篡改技术的优化方法与流程
  13. 如何给excel添加开发者选项
  14. ALCOA+CCEA原则(数据完整性标准)
  15. 随笔杂记(十)——C++:C4996报错解决方法
  16. 了解 Fetch API
  17. (Sentinel-2A、Sentinel-2B)2017年全年中国地区数据
  18. DOTS支持的shader
  19. 防抄板加密芯片ALPU笔记
  20. 怎样给音乐变速变调调音?不妨试试这些变声变调方法

热门文章

  1. Windows Git 多用户多仓库配置
  2. 中文标注工具brat的使用
  3. 红黑树-Java实现
  4. [PHP] Larval 主从读写分离配置
  5. navcat导入mdf数据库文件教程
  6. Photoshop制作圣诞海报
  7. 最高奖励68万!多邻国英语测试设立研究基金
  8. 每天一道面试题--- js 中 this 指针的用法
  9. Kubernetes核心原理(二)之Controller Manager
  10. 转载maven版本更新