【问题标题】:Get Java annotation's desired data获取 Java 注解的所需数据
【发布时间】:2016-05-20 05:17:32
【问题描述】:

当我pull the annotations of a method in Java class 时,我收到以下String 响应:

@client.test.annotations.TestInfo(id=[C10137])
@org.testng.annotations.Test(alwaysRun=false, expectedExceptions=[]..

但是,我只对 id=[C10137] 部分感兴趣,并希望获得该号码 - 10137。也可以是这样的情况:

案例1: //multiple ids

@client.test.annotations.TestInfo(id=[C10137, C12121])
    @org.testng.annotations.Test(alwaysRun=true,...

案例2: //no id

@client.test.annotations.TestInfo(id=[]) //ignore this time
    @org.testng.annotations.Test(alwaysRun=true,...

这里的正则表达式会为我工作以生成这个 id 数组吗?或其他一些获得所需 id 数组的好方法。

【问题讨论】:

    标签: java regex annotations pattern-matching text-processing


    【解决方案1】:

    你可以使用这个正则表达式

    \bid\b=\[(.+?)\]
    

    Regex Demo

    Java 代码

    String line = "@client.test.annotations.TestInfo(id=[C10137])@org.testng.annotations.Test(alwaysRun=false, expectedExceptions=[].."; 
    String pattern = "\\bid\\b=\\[(.+?)\\]";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(line);
    
    if (m.find()) {
        System.out.println(m.group(1));
    }
    

    Ideone Demo

    【讨论】:

    • 将我的 CASE1 视为我的 Java 字符串。我正在这样做String.replaceAll(String,"\bid\b=\[(.+?)\]")...编译器说正则表达式的序列无效?我错过了什么吗?
    • @PratikJaiswal 你可以使用matcher..看看它here
    • 为我工作,我可以从这里接手。
    • 遇到id={"C1123", "C4556"} 的问题(在我的问题中)。此模式打印C1123C4556。有没有办法正则表达式或其他任何东西可以知道一旦找到一个ID,它就必须放置逗号或一些分隔符。假设示例,String line = "@client.test.annotations.TestInfo(id=[C10137,C22334])@org.testng.annotations.Test(alwaysRun=false, expectedExceptions=[]..";
    • 已编辑上述评论:我在回答后进行了一些处理,这就是我缺少逗号的原因。现在修好了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2023-03-04
    相关资源
    最近更新 更多