2016-05-20 8 views
1

ich folgende String Antwort bekommen, wenn ich pull the annotations of a method in Java class:Get Java Annotations die gewünschten Daten

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

Allerdings bin ich daran interessiert sind nur in den id=[C10137] Teil und wollen diese Zahl bekommen - 10137. Es kann auch ein Fall sein:

CASE1://multiple ids

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

CASE2://no id

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

Wird hier Arbeit für mich regex dieses Array zu produzieren von IDs? ODER ein anderer guter Ansatz, um das gewünschte ID-Array zu erhalten.

Antwort

1

können Sie diese Regex verwenden

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

Regex Demo

Java-Code

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

+0

Betrachten Sie meine fragliche 'CASE1' als meine Java-Zeichenfolge. Ich mache das 'String.replaceAll (String," \ bid \ b = \ [(. +?) \] ")' ... Compiler sagt ungültige Sequenz für Regex? Fehle ich etwas? –

+0

@PratikJaiswal können Sie 'Matcher' verwenden..Sehen Sie es ** [hier] (http://ideone.com/knJM6D) ** – rock321987

+1

Arbeitete für mich und ich kann es von hier aus übernehmen. –