Получить определенную часть строки в Java - PullRequest
1 голос
/ 19 марта 2012

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

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

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

Требуемый вывод:

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

Ответы [ 4 ]

2 голосов
/ 19 марта 2012

Как насчет этого однострочного:

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]
2 голосов
/ 19 марта 2012

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

// 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 голос
/ 19 марта 2012

Ваши данные очень похожи на метод 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();

следует к нему.

1 голос
/ 19 марта 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...