我有空格的字符串和一些非信息性的字符和子字符串需要被排除,只是为了保留一些重要的部分。我使用如下分组:
String myString[]={"01: Hi you look tired today? Can I help you?"};
myString=myString[0].split("[\\s+]");// Split based on any white spaces
for(int ii=0;ii<myString.length;ii++)
System.out.println(myString[ii]);
结果是:
01:
Hi
you
look
tired
today?
Can
I
help
you?
当正则表达式为“[\ s +]”时,分割后的空格出现为子字符串,但当正则表达式为“\ s +”时,空格消失。我很困惑,无法在相关的堆栈溢出页面中找到答案。链接regex-Pattern让我更加困惑。 请帮助,我是java的新手。
19/1/2015:Edit
在您提出宝贵建议后,我在程序中指出需要分解和处理条件语句。我的情况是:
String s1="01:IF rd.h && dq.L && o.LL && v.L THEN la.VHB , av.VHR with 0.4610;";
String [] s2=s1.split(("[\\s\\&\\,]+"));
for(int ii=0;ii<s2.length;ii++)System.out.println(s2[ii]);
结果很好,直到现在:
01:IF
rd.h
dq.L
o.LL
v.L
THEN
la.VHB
av.VHR
with
0.4610;
我的下一步是在正则表达式中添加字符串“with”,并在进行拆分时删除此单词。 我这样试过:
String s1="01:IF rd.h && dq.L && o.LL && v.L THEN la.VHB , av.VHR with 0.4610;";
String [] s2=s1.split(("[\\s\\&\\, with]+"));
for(int ii=0;ii<s2.length;ii++)System.out.println(s2[ii]);
结果并不完美,因为我在每个“h”字母上得到了不同的额外分割:
01:IF
rd.
dq.L
o.LL
v.L
THEN
la.VHB
av.VHR
0.4610;
有关如何使用混合空格和分隔标记指定字符串的任何建议吗? 非常感谢。
答案 0 :(得分:2)
在方括号内,[\s+]
将表示添加了加号的空白字符类。它只有一个字符,所以一系列空格会像Todd所说的那样分割许多空字符串,并且还会使用+
作为分隔符。
您应该使用\s+
(不带括号)作为分隔符。这意味着一个或多个空格字符。
myString=myString[0].split("\\s+");
答案 1 :(得分:0)
你最大的问题是对正则表达式的理解不够正确。您无法理解的一个关键点是[...]
是字符类,它是任何一个都可以匹配的字符列表。例如:
[abc]
匹配a,b或c(不匹配&#34; abc&#34;)[\\s+]
匹配任何空格或&#34; +&#34;字符[with]
匹配w,i,t或h [.$&^?]
匹配那些文字字符 - 大多数字符在字符类中失去特殊的正则表达式意义分割任意数量的空格,逗号和&符号,并使用&#34;&#34; (如果出现),请执行以下操作:
String [] s2 = s1.split("[\\s,&]+(with[\\s,&]+)?");
您可以在Online Regex轻松尝试并获得有用的评论。