从字符串Java中删除短字和字符

时间:2013-12-18 09:20:31

标签: java regex string

输入字符串:

String input = "Lorem Ipsum is simply dummy text of the printing and typesetting industry";

输出字符串:

String output = "Lorem Ipsum simply dummy printing typesetting industry";

删除短语的最佳方法是什么?

这是我的第一个想法:

private String removeShortWords(String string){
    int minLength = 5;
    String result = "";

    String[] words = string.split("\\s+");

    for (int i = 0; i < words.length; i++){
        String word = words[i];
        if(word.length() >= minLength){
            result += word + " ";
        }
    }       

    return result;
}

5 个答案:

答案 0 :(得分:9)

一行:

String output = input.replaceAll("\\b\\w{1,4}\\b\\s?", "");

答案 1 :(得分:1)

你的方法很好,除了:

  • 重建String时,不保留空格数。
  • 您应该使用StringBuilder代替+=
  • 您最后添加了多余的空间。

我会做那样的事情:

迭代字符串,只要我有char,我递增一个计数器并将char添加到某个临时字符串,否则,我有一个空格。我检查计数器的值,如果它是<= 5我不添加临时字符串,否则,我这样做。这样我也保留了空间。

关于复杂性,当n是String的长度时,它是O(n),因为我们只在String上“行进”一次。

答案 2 :(得分:1)

你接近是可以的,但出于性能原因,最好使用StringBuilder,因为+=在循环的每次迭代中创建它。另请注意Maroun关于输出完整性的评论。

另一种选择是使用正则表达式,此调用应具有相同的效果:

return string.replaceAll("\\b\\w{1,4}\\b","");

请注意,出于性能原因,您需要预先编译模式并重新使用它。

答案 3 :(得分:0)

试试这段代码

          String input = "Lorem Ipsum is simply dummy text of the printing and typesetting industry";
            String[] dev=input.split(" ");
             for(int i=0;i<dev.length;i++)
              if(dev[i].length()<=2)
               input=input.replaceAll(dev[i], "");

答案 4 :(得分:0)

尝试使用StringTokenizer而不是Split,并使用StringBuilder创建结果

int minLength = 5;
StringTokenizer tokenizer = new StringTokenizer(input, " ");
StringBuilder builder = new StringBuilder();
  while(tokenizer.hasMoreTokens()){
    String token = tokenizer.nextToken();
    if(token.length() >= minLength){
    builder.append(token);
        builder.append(" ");
  }
}
return builder.toString();