Havenort 2021-07-13 10:03 采纳率: 100%
浏览 62
已采纳

Java有什么办法获取类属性注释

img

有办法获取这个属性注释吗 不是注解 业务逻辑涉及到这个东西 之前没获取过注释 反射获取其他的还行 这个要怎么搞

  • 写回答

4条回答 默认 最新

  • CSDN专家-Fay 2021-07-13 10:08
    关注

    获取文件中的注释,需要将文件以流的方式去读取内容,筛选//和/**/的内容:

    package com.ht.test;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class PrintComments {
        public static void main(String[] args) {
            try {
                FileReader freader = new FileReader("C:/guess.java");
                BufferedReader breader = new BufferedReader(freader);
                StringBuilder sb = new StringBuilder();
                try {
                    String temp = "";
                    /**
                     * 读取文件内容,并将读取的每一行后都不加\n
                     * 其目的是为了在解析双反斜杠(//)注释时做注释中止符
                     */
                    while((temp=breader.readLine())!= null)
                    {
                        sb.append(temp);
                        sb.append('\n');
                    }
                    String src = sb.toString();
                    /**
                     * 1、做/* 注释的正则匹配
                     *
    
                     *     通过渐进法做注释的正则匹配,因为/*注释总是成对出现
                     * 当匹配到一个/*时总会在接下来的内容中会首先匹配到"*\\/",
                     * 因此在获取对应的"*\\/"注释时只需要从当前匹配的/*开始即可,
                     * 下一次匹配时只需要从上一次匹配的结尾开始即可
                     * (这样对于大文本可以节省匹配效率)——
                     * 这就是渐进匹配法
                     *
    
                     * */
                    Pattern leftpattern = Pattern.compile("/\\*");
                    Matcher leftmatcher = leftpattern.matcher(src);
                    Pattern rightpattern = Pattern.compile("\\*/");
                    Matcher rightmatcher = rightpattern.matcher(src);
                    sb = new StringBuilder();
                    /**
                     * begin 变量用来做渐进匹配的游标 {@value}
                     * 初始值为文件开头
                     * **/
                    int begin = 0;
                    while(leftmatcher.find(begin))
                    {
                        rightmatcher.find(leftmatcher.start());
                        sb.append(src.substring(leftmatcher.start(), rightmatcher.end()));
                        /** 为输出时格式的美观 **/
                        sb.append('\n');
                        begin = rightmatcher.end();
                    }
                    System.out.println(sb.toString());
                    /**
                     * 2、对//注释进行匹配(渐进匹配法)
                     * 匹配方法是 // 总是与 \n 成对出现
                     * */
                    begin = 0;
                    Pattern leftpattern1 = Pattern.compile("//");
                    Matcher leftmatcher1 = leftpattern1.matcher(src);
                    Pattern rightpattern1 = Pattern.compile("\n");
                    Matcher rightmatcher1 = rightpattern1.matcher(src);
                    sb = new StringBuilder();
                    while(leftmatcher1.find(begin))
                    {
                        rightmatcher1.find(leftmatcher1.start());
                        sb.append(src.substring(leftmatcher1.start(), rightmatcher1.end()));
                        begin = rightmatcher1.end();
                    }
                    System.out.println(sb.toString());
                } catch (IOException e) {
                    System.out.println("文件读取失败");
                }finally
                {
                    breader.close();
                    freader.close();
                }
            } catch (FileNotFoundException e) {
                System.out.println("文件不存在");
            }catch(IOException e)
            {
                System.out.println("文件读取失败");
            }
        }
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已采纳回答 7月13日
  • 创建了问题 7月13日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!