第一篇文章。好吗?
学习Java。
我有一个String对象"1 Book on wombats at 12.99"
我想将此字符串拆分为String[]
或ArrayList<String>
将第一个空格和“at”字样的字符串拆分,以便我的String[]
有3个字符串{ {1}} "1"
"Book on wombats"
我目前的解决方案是:
"12.99"
所以这很好用,但肯定有更优雅的方式吗?也许正在使用正则表达式,这是我仍在努力处理好的事情。
三江源!
答案 0 :(得分:6)
你可以使用这种模式
^(\S+)\s(.*?)\sat\s(.*)$
^ 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)};