Java:将两个不同点的字符串拆分为3个部分

时间:2014-10-30 22:38:05

标签: java regex string split

第一篇文章。好吗?

学习Java。

我有一个String对象"1 Book on wombats at 12.99"

我想将此字符串拆分为String[]ArrayList<String>将第一个空格和“at”字样的字符串拆分,以便我的String[]有3个字符串{ {1}} "1" "Book on wombats"

我目前的解决方案是:

"12.99"

所以这很好用,但肯定有更优雅的方式吗?也许正在使用正则表达式,这是我仍在努力处理好的事情。

三江源!

4 个答案:

答案 0 :(得分:6)

你可以使用这种模式

^(\S+)\s(.*?)\sat\s(.*)$ 

Demo

^        begining of string
(\S+)    caputre anything that is not a white space    
\s       a white space
(.*?)    capture as few as possible
\sat\s   followed by a white space, the word "at" and a white space
(.*)$    then capture anything to the end

答案 1 :(得分:4)

此正则表达式将返回您所需的内容:^(\S+)\s(.*?)\sat\s(.*)$

说明:

^在一行开头断言。

\S+将匹配任何非空白字符。

\s将匹配任何空格字符。

.*?将匹配任何字符(换行符除外)。

\s将再次匹配任何空格字符。

at字面匹配字符at(区分大小写)。

\s将再次匹配任何空格字符。

(.*)$将匹配任何字符(换行符除外),并在行尾声明位置。

答案 2 :(得分:0)

只要在item上调用.split()就可以了。 将该数组存储在String []中,然后将您想要的String []的索引硬编码到要返回的ArrayList中。 String.concat()方法也可能有所帮助。

答案 3 :(得分:0)

这是一段代码,用于获取您请求的String []结果。使用其他答案中建议的正则表达式:

通过使用另一个反斜杠转义每个反斜杠,将

^(\S+)\s(.*?)\sat\s(.*)$转换为Java字符串,因此在创建Pattern对象时它们会出现两次。

String item = "1 Book on wombats at 12.99";
Pattern pattern = Pattern.compile("^(\\S+)\\s(.*?)\\sat\\s(.*)$");
Matcher matcher = pattern.matcher(item);
matcher.find();
String[] parts = new String[]{matcher.group(1),matcher.group(2),matcher.group(3)};