2016-11-19 93 views
2

我期待将字符串“PICK TWO IN ORDER:10 2 T F”分解为以下5个部分。Java正则表达式拆分方法

Str[0] = "PICK TWO IN ORDER" 
Str[1] = 10 
Str[2] = 2 
Str[3] = T 
Str[4] = F 

我能得到的字符串分割成两个部分,其中它的字符串“挑二,以”和“10 2 T F”通过使用正则表达式“(:)”。但是,我似乎无法弄清楚如何拆分第二部分。当使用“\ s”根据空格拆分时,它将第一部分拆分为四部分。

是否有限制正则表达式解析字符串的哪部分?或者我必须将其作为一个两步骤的过程并相应地拆分它们?

谢谢。

+0

像这样:'[:\ S]'? – Laurel

回答

4

您可以在拆分中使用负向前视图,仅在:之后的空格上拆分。

String s = "PICK TWO IN ORDER: 10 2 T F"; 
String[] foo = s.split(":\\s|\\s(?!.*:)"); 

输出:

PICK TWO IN ORDER 
10 
2 
T 
F 
+1

谢谢!我从来没有听说过负面/积极的前瞻性分裂。阅读它。这正是我所期待的。 – ButtahNBred

+0

不客气@ButtahNBred – baao

0

你可以编译一个Pattern,如果匹配,就用它来填充一个数组。喜欢的东西,

String sentence = "PICK TWO IN ORDER: 10 2 T F"; 
Pattern p = Pattern.compile("(.+)\\:\\s+(\\d+)\\s+(\\d+)\\s+([T|F])\\s+([T|F])"); 
Matcher m = p.matcher(sentence); 
String[] Str = null; 
if (m.find()) { 
    Str = new String[m.groupCount()]; 
    for (int i = 1; i <= Str.length; i++) { 
     Str[i - 1] = m.group(i); 
    } 
} 
System.out.println(Arrays.toString(Str)); 

其产生你的要求相匹配的String[]命名Str

[PICK TWO IN ORDER, 10, 2, T, F] 
0

最简单的方法将只是做两个步骤:

String str = "PICK TWO IN ORDER: 10 2 T F"; 
String[] split1 = str.split(":"); 
String[] split2 = split1[1].trim().split("\\s+"); 

...的结果是split1[0]split2

+0

我认为我的工作更轻松:-) – baao

+1

你是对的,它的确可以更容易地得到理想的答案:D – qxz