Java 擦除/替换空子字符串

Java 擦除/替换空子字符串,java,regex,string,Java,Regex,String,我目前正在做一件事,应该算上一个推文文件中的字数。我正在用空格替换只短两个字符的特殊字符和单词。因此,稍后我可以得到两个空格,我将在下一行中替换它们。变量“words”是一个HashMap,其中存储了单词的相应频率 tweet = tweet.replaceAll("[^\\d\\p{L} ]", " "); tweet = tweet.replaceAll("\\b.{1,2}\\b", " "); tweet = tweet.replaceAll("\\s{2,}", " "); twee

我目前正在做一件事,应该算上一个推文文件中的字数。我正在用空格替换只短两个字符的特殊字符和单词。因此,稍后我可以得到两个空格,我将在下一行中替换它们。变量“words”是一个HashMap,其中存储了单词的相应频率

tweet = tweet.replaceAll("[^\\d\\p{L} ]", " ");
tweet = tweet.replaceAll("\\b.{1,2}\\b", " ");
tweet = tweet.replaceAll("\\s{2,}",  " ");
tweet = tweet.toLowerCase();
for (String word : tweet.split(" ")){
if (words.containsKey(word)){
        words.put(word, words.get(word)+1);
} else {
        words.put(word, 1);
我的问题是,生成的单词列表及其频率包含空字符串。大多数情况下,这是最常见的字符串。我不知道这是从哪里来的,也不知道如何摆脱它,希望有人能帮助我。

怎么办

tweet.trim().split(" +")

也可考虑将发音符号组合为单词<代码> \PM

tweet = tweet.replaceAll("[^\\d\\p{L}\\p{M}]", " ");

也可考虑将发音符号组合为单词<代码> \PM

tweet = tweet.replaceAll("[^\\d\\p{L}\\p{M}]", " ");

我猜当tweet以空格开始或结束时,会出现空字符串

tweet = tweet.trim(); // remove leading and trailing space 

我猜当tweet以空格开始或结束时,会出现空字符串

tweet = tweet.trim(); // remove leading and trailing space 

由于您将匹配的“单词”替换为空格,因此在
tweet
字符串的开头和结尾将出现多个空格的序列。。。在中间。但是您使用单个空格作为分隔符来拆分它。空字符串表示连续空格之间的内容

一个可能的解决方案:

tweet = tweet.trim();
for (String word : tweet.split("\\s+")) {

(regex
\s+
表示“一个或多个空白字符”。

因为您要替换匹配的“单词”“使用空格,您将在
tweet
字符串的开头和结尾处得到多个空格的序列。。。在中间。但是您使用单个空格作为分隔符来拆分它。空字符串表示连续空格之间的内容

一个可能的解决方案:

tweet = tweet.trim();
for (String word : tweet.split("\\s+")) {
(regex
\s+/code>表示“一个或多个空白字符”。)