Sno*_*san 23 java regex string split
我有这个文本文件,我读入Java应用程序,然后逐行计算其中的单词.现在我正在将这些行分成一个单词
String.split([\\p{Punct}\\s+])"
Run Code Online (Sandbox Code Playgroud)
但我知道我错过了文本文件中的一些单词.例如,"不能"这个词应该分成两个词"can"和"t".
应完全忽略逗号和其他标点符号,并将其视为空格.我一直试图理解如何形成一个更精确的正则表达式来做到这一点,但我是一个新手,所以我需要一些帮助.
对于我描述的目的,什么可以是更好的正则表达式?
ste*_*ema 22
你的正则表达式中有一个小错误.试试这个:
String[] Res = Text.split("[\\p{Punct}\\s]+");
Run Code Online (Sandbox Code Playgroud)
[\\p{Punct}\\s]+将+字符类中的表单移动到外部.另外明智的是你也在分裂+并且不连续组合分裂字符.
所以我得到了这段代码
String Text = "But I know. For example, the word \"can\'t\" should";
String[] Res = Text.split("[\\p{Punct}\\s]+");
System.out.println(Res.length);
for (String s:Res){
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
这个结果
10
但是
我
知道
对于
例如
在
字
可以
牛逼
应
哪个应该符合您的要求.
作为替代方案,您可以使用
String[] Res = Text.split("\\P{L}+");
Run Code Online (Sandbox Code Playgroud)
\\P{L} means不是具有属性"Letter"的unicode代码点
Qwe*_*rky 11
有一个非单词的字面意思\W,请参阅Pattern.
String line = "Hello! this is a line. It can't be hard to split into \"words\", can it?";
String[] words = line.split("\\W+");
for (String word : words) System.out.println(word);
Run Code Online (Sandbox Code Playgroud)
给
Hello
this
is
a
line
It
can
t
be
hard
to
split
into
words
can
it
Run Code Online (Sandbox Code Playgroud)