擦除/替换空子字符串

时间:2013-08-01 08:37:24

标签: java regex string

我目前正在开发一些东西,它应该计算从Tweets文件中给出的单词。我正在替换特殊字符和单词,这些字符只有两个字符,用空格填充。因此,后来我可以得到双空格,我将在下一行中替换它。变量“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);

我的问题是,生成的单词列表具有其频率,包含空字符串。大多数情况下,这是最常见的字符串。我不知道它来自哪里以及如何摆脱它并希望有人可以帮助我。

3 个答案:

答案 0 :(得分:1)

待办事项

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

同时考虑将变音符号组合为单词\pM

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

答案 1 :(得分:0)

我猜想当推文开始或以空格结尾时会出现空字符串。

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

答案 2 :(得分:0)

由于您要用空格替换匹配的“单词”,您最终会在tweet字符串的开头和结尾处以及在中间的多个空格序列。但是您使用单个空格作为分隔符来拆分它。空字符串代表连续空格之间的东西。

一种可能的解决办法:

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

(正则表达式\s+表示“一个或多个空白字符。”