1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
而不是拆分,你應(yīng)該更喜歡使用find這個(gè)正則表達(dá)式來找到你想要的所有標(biāo)記,
[a-zA-Z]+(['][a-zA-Z]+)?
這個(gè)正則表達(dá)式只允許在其中夾入一個(gè)'。如果你想允許任何其他這樣的字符,只需將它放在字符集中['],現(xiàn)在它只允許一次,如果你想允許多次,你必須?在最后改變 a*使其為零或更多次。
簽出您修改后的 Java 代碼,
List<String> tokenList = new ArrayList<String>();
String str = "..Hello ?don't #$you %know?";
Pattern p = Pattern.compile("[a-zA-Z]+(['][a-zA-Z]+)?");
Matcher m = p.matcher(str);
while (m.find()) {
tokenList.add(m.group());
}
String[] strArray = tokenList.toArray(new String[tokenList.size()]);
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i] + i);
}
印刷,
Hello0
don't1
you2
know3
但是,如果您堅(jiān)持split只使用方法,那么您可以使用此正則表達(dá)式來拆分值,
[^a-zA-Z]*\\s+[^a-zA-Z]*|[^a-zA-Z']+
它基本上將字符串拆分為一個(gè)或多個(gè)空格,可選地由非字母字符包圍或按一個(gè)或多個(gè)非字母和非單引號(hào)字符的序列拆分。這是使用 split 的示例 Java 代碼,
String str = ".. Hello ?don't #$you %know?";
String[] strArray = Arrays.stream(str.split("[^a-zA-Z]*\\s+[^a-zA-Z]*|[^a-zA-Z']+")).filter(x -> x.length()>0).toArray(String[]::new);
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i] + i);
}
印刷,
Hello0
don't1
you2
know3
請(qǐng)注意,我在流上使用了過濾器方法來過濾零長度的令牌,因?yàn)椴鸱挚赡軙?huì)在數(shù)組的開頭生成零長度的令牌。
添加回答
舉報(bào)