如何使用Java正则表达式将带有撇号的单词计算为两个单独的单词
我有一个字符串,它有一个带撇号的单词。 他是一个非常非常好的男孩,不是吗如何使用Java正则表达式将带有撇号的单词计算为两个单独的单词,java,regex,Java,Regex,我有一个字符串,它有一个带撇号的单词。 他是一个非常非常好的男孩,不是吗 public class Solution { public static void main(String[] args) { String s = "He is a very very good boy, isn't he?"; String[] words = s.split("\\s+"); int itemCount = words
public class Solution {
public static void main(String[] args) {
String s = "He is a very very good boy, isn't he?";
String[] words = s.split("\\s+");
int itemCount = words.length;
System.out.println(itemCount);
for (int i = 0; i < itemCount; i++) {
String word = words[i];
System.out.println(word);
}
}
}
公共类解决方案{
公共静态void main(字符串[]args){
String s=“他是一个非常非常好的男孩,不是吗?”;
字符串[]字=s.split(\\s+);
int itemCount=words.length;
系统输出打印项数(itemCount);
对于(int i=0;i
我得到的输出是9个单词。但我希望计数为10,因为分开不是两个字。如何使用上面的正则表达式 我想你希望
不是
是不是
,所以把它们算作两个独立的单词,而不是一个
在拆分正则表达式中可以有或(|
)
\\s+|'t
这只适用于't
,它将避免像我朋友的生日这样的句子。
这里撇号不应被视为另一个单词
但这不仅仅是故事的结局。在这种表达中,还有许多其他的收缩现象需要考虑。
i、 e
- 't:不是,不是,不是,不是,不是,不会,没有等
- 的:是,那是,等等(这是一个困难的问题)
- 'd:我愿意,你愿意等等
- 'll:我会的,他们会的,等等。
\\s+|'t|'d|'ll
(撇号s)的问题是它带有主题,如Dog's、Cat's等,表示拥有,不应将其视为两个单独的单词。另一方面,有时我们使用的
来编写它,即(即,它)等。您可以在现有正则表达式中添加表达式,以区分收缩和表示占有的撇号
注意:这仅用于计算单词,它会将is not
拆分为is
和
(空格),'t
将被删除。使用\w
结构更可靠:
Pattern p = Pattern.compile("(\\w)+");
Matcher m = p.matcher("He is a very very good boy, isn't he?");
while (m.find()) {
System.out.println(m.group(0));
}
否则,您需要手动处理太多的情况,例如:“他是一个非常好的男孩,不是吗?”。您可以尝试使用p{Punct},它会忽略以下字符:
String s = "He is a very very good boy, isn't he?";
String[] words = s.split("[\\p{Punct}\\s]+");
int itemCount = words.length;
System.out.println(itemCount);
for (int i = 0; i < itemCount; i++) {
String word = words[i];
System.out.println(word);
}
String s=“他是一个非常非常好的男孩,不是吗?”;
String[]words=s.split([\\p{Punct}\\s]+”;
int itemCount=words.length;
系统输出打印项数(itemCount);
对于(int i=0;i
在非单词字符上拆分:
String[] words = s.split("\\W+")
使用交替选项:-String[]words=s.split(\\s+|')
向上面的评论添加了提示,但是您确定要将不是变成是和t
?@rock321987 Ok。我如何指定逗号(,)问号(?)等。如果我用|来声明它们,它将作为一个单词计数,并且单词计数正在增加。@Progator你能详细说明一下吗?提供一些example@rock321987在上面的字符串“他是一个非常非常好的男孩,不是吗?”中,单词计数应该是10,我想省略逗号和问号。就像这样——他是一个非常非常好的男孩,不是吗。我怎么能省略?等在句子中使用或(|)在同一个表达中?@主角:是这样吗?那么请不要在评论中再提出新问题。你的补充问题似乎与原来的问题无关。那么我该如何计算字数呢?在上面的示例字符串中,计数应为10Matcher
is lazy(出于性能原因)。在你要求之前,它不会找到所有匹配项。因此,找到匹配项计数的唯一方法是迭代并手动计数。如果您需要在单词之前打印计数,只需在计数时将单词收集到列表中,然后打印列表即可。如果您经常需要此逻辑,只需使用此逻辑在Matcher
周围创建一个包装器即可too@Protagonistint count=words.length代码>