我希望将字符串“PICK TWO IN ORDER:10 2 T F”分成以下5个部分。
Str[0] = "PICK TWO IN ORDER"
Str[1] = 10
Str[2] = 2
Str[3] = T
Str[4] = F
我可以通过使用正则表达式“(:)”将字符串分成两部分,即字符串“PICK TWO IN ORDER”和“10 2 T F”。但是,我似乎无法弄清楚如何拆分第二部分。当使用“\ s”基于空格进行拆分时,它会将第一部分拆分为四部分。
无论如何都要限制正则表达式解析的字符串的哪一部分?或者我是否必须将其作为两步过程使用并相应地拆分它们?
感谢。
答案 0 :(得分: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 :(得分: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[]
的{{1}}。
Str
答案 2 :(得分:0)
最简单的方法就是分两步完成:
[PICK TWO IN ORDER, 10, 2, T, F]
...结果为String str = "PICK TWO IN ORDER: 10 2 T F";
String[] split1 = str.split(":");
String[] split2 = split1[1].trim().split("\\s+");
和split1[0]
。