好吧,我正在寻找Java中的正则表达式,以删除所有少于3个字符的单词。
我以为像\s\w{1,2}\s
这样的东西可以抓取所有1个和2个字母的单词(一个空格,一个到两个单词字符以及另一个空格),但这是行不通的。
我哪里错了?
最佳答案
我的工作情况还不错,但是花了两遍。
public static void main(String[] args) {
String passage = "Well, I'm looking for a regexp in Java that deletes all words shorter than 3 characters.";
System.out.println(passage);
passage = passage.replaceAll("\\b[\\w']{1,2}\\b", "");
passage = passage.replaceAll("\\s{2,}", " ");
System.out.println(passage);
}
第一遍将包含少于三个字符的所有单词替换为一个空格。请注意,我必须在字符类中包括撇号以消除该字符,因为如果没有它,“I'm”一词会给我带来麻烦。您可能会在文本中找到其他特殊字符,也需要在此处添加这些特殊字符。第二遍是必需的,因为第一遍留下了一些留有双倍空格的位置。这只会将2个或更多空间的所有出现折叠为1。是否保留此内容取决于您,但是我认为随着空间的缩小,效果会更好。
输出: