2012-03-19 2 views
1

Я хочу, чтобы получить определенные части строки, как:Получить определенную часть строки в Java

@org.junit.runners.Suite$SuiteClasses(value=[class data.XTest 
, class data.YTest]) 

data.XTestdata.YTest и изменчивы. Каков наилучший способ получить занятия после class.

Требуемая мощность:

sTring[0] = data.XTest; 
sTring[1] = data.YTest; 
+0

ли вы * действительно * хотите их в массиве? – Bohemian

+0

или список. Дело в том, как лучше всего получить части этой строки, чтобы я мог работать с ними с отражением. – ctekk

ответ

2

Как об этом однострочнике:

String[] parts = input.replaceAll(".*\\[class (.*)\\].*", "$1").split(", class "); 

Это работает первым использование регулярных выражений, чтобы извлечь подстроку между "...[class " и "]", затем расщепляется на разделительных гольцах аккуратно срывать целевые строки.

Вот тест:

public static void main(String[] args) { 
    String input = "@org.junit.runners.Suite$SuiteClasses(value=[class data.XTest, class data.YTest])"; 
    String[] parts = input.replaceAll(".*\\[class (.*)\\].*", "$1").split(", class "); 
    System.out.println(Arrays.toString(parts)); 
} 

Выход:

[data.XTest, data.YTest] 
1
String s = "@org.junit.runners.Suite$SuiteClasses(value=[class data.XTest, class data.YTest])"; 
String temp = "value=[class "; 
s = s.substring(s.indexOf(temp) + temp.length(), s.indexOf("])")); 
String[] arr = s.split(", class "); 
// sTring[0] = arr[0]; 
// sTring[1] = arr[1]; 
System.out.println(arr[0]); 
System.out.println(arr[1]); 

ВЫХОДА:

data.XTest 
data.YTest 
+0

Это не удается, потому что оно не обрезает конечный «])« off »sTring [1]'. –

2

Я хотел бы использовать регулярные выражения.

// uses capturing group for characters other than "," "]" and whitespace... 
Pattern pattern = Pattern.compile("class ([^,\\]\\s]+)"); 
Matcher matcher = pattern.matcher(input); 
while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

дает

data.XTest 
data.YTest 

для строки ввода образца. Приспосабливайтесь к вашим требованиям.

1

Ваши данные очень похожи на метод toString класса Class. Возможно, вы захотите использовать API, доступный для аннотации и класс Class. Я думаю, что-то вроде:

SuiteClasses a = ...; <- Put the annotation object here instead of calling toString on it 
Class[] c = a.value(); 
sTring[0] = c[0].getName(); 
sTring[1] = c[1].getName(); 

Должно ему.

+0

не может найти значение() в аннотации – ctekk

+0

Вам нужно объявить 'a' с типом аннотации. Я обновил свой код соответственно. –

+0

ok Я думаю, что получил, круто спасибо! – ctekk

Смежные вопросы