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