2012-03-19 75 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 2012-03-19 13:39:07

+0

或列表。问题是如何最好地得到这个字符串的部分,所以我可以使用反射 – ctekk 2012-03-19 13:41:04

回答

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]); 

OUTPUT:

data.XTest 
data.YTest 
+0

这个失败,因为它不会修剪sTring [1]'结尾的“])”。 – 2012-03-19 13:39:21

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

您的数据看起来很像Class类的toString方法。您可能想要使用注释和类提供的API。我认为是这样的:

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 2012-03-19 13:47:27

+0

您需要用注释的类型声明'a'。我相应地更新了我的代码。 – 2012-03-19 14:20:46

+0

好的我想我明白了,非常感谢! – ctekk 2012-03-19 14:34:01

相关问题