2011-10-05 33 views
0

我对Java并不陌生,但之前没有处理过正则表达式和模式。我想要做的是采取一个字符串像将字符串拉出字符串的模式

"Class: " + data1 + "\nFrom: " + data2 + " To: " + data3 + "\nOccures: " + data4 + " In: " + data5 + " " + data6; 

并只拉出data_1到data_n。
我感谢任何帮助。

+0

大声笑我正要这样做XD – Mastergeek

回答

0

使用这个表达式:

Pattern pattern = Pattern.compile("Class: (.+?)\nFrom: (.+?) To: (.+?)\nOccures: (.+?) In: (.+?) (.+?)"); 
Matcher matcher = pattern.matcher(yourInputString); 
if (matcher.find()) 
{ 
    String data1 = matcher.group(1); 
    String data2 = matcher.group(2); 
    String data3 = matcher.group(3); 
    String data4 = matcher.group(4); 
    String data5 = matcher.group(5); 
    String data6 = matcher.group(6); 
} else 
{ 
    // String didn't match the specified format 
} 

说明:

.+?将匹配不确定的时间任意字符,但不贪婪。
(),使用括号会创建一个组。一个组被给予从1开始的索引(因为组0是整个匹配)

因此,(.+?)将创建任何字符的组。

匹配器的功能是在输入字符串的某处搜索整个模式。但是,既然你指定了格式,我们确切知道你的整个字符串是怎么样的。您唯一需要做的就是复制格式并将要提取的数据替换为““(.+?),您可以通过创建一个索引来给出索引。

之后,匹配将设法找到(由matcher.find()完成)的模式,你问他们的内容是什么组1高达6

+0

感谢一堆:D你介意解释模式在做什么?如果不是,我可以查看它。我只是想知道我所有的代码在做什么。 – Mastergeek

+0

Marvilous work Martijn。非常感谢。关于模式在做什么的帮助和解释。 – Mastergeek

0

关于采用分体式如何()用“:”然后从splitted String []获取字符串[2i + 1]? (我从0)