我有这个代码:
String s=" //wont won't won't ";
String[] w = s.split("[\s+\/,\.!_\-?;:]++");
我不认为"被删除"不会,因为它是单词的一部分。我们将不胜感激但是//我真的不想//被除名吗。
所以我的问题是——如果某个标点符号是单词的一部分,比如";不会"我们有,但同时保持这个-
"[\s+\/,\.!_\-?;:]++"
您可以使用
String[] w = s.split("[\s+/,.!_\-?;:]+|\B'|'\B");
请参阅regex演示详细信息:
[s+/,.!_-?;:]+
-一个或多个空白,+
、/
、,
、.
、!
、_
、-
、?
、;
或:
|
-或B'
-位于字符串开头或紧挨着前面有非单词字符的'
|
-或'B
-位于字符串末尾或紧跟非单词字符的'
查看Java演示:
String s =" //wont won't won't ";
String[] w = s.split("[\s+/,.!_\-?;:]+|\B'|'\B");
System.out.println(Arrays.toString(w));
// => [, wont, won't, won't]
如果首先删除字符串开头的所有匹配项,则可以在开头删除空条目:
String regex = "[\s+/,.!_\-?;:]+|\B'|'\B";
String[] w2 = s.replaceFirst("^(?:"+regex+")+", "").split(regex);
System.out.println(Arrays.toString(w2));
// => [wont, won't, won't]