2013-12-18 96 views
2

輸入字符串:從字符串中刪除短字和字符的Java

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; 
} 
+3

定義 '短'。是否刪除少於5個字符的任何單詞? – PakkuDon

+1

我推薦使用'StringBuilder'。 – ChiefTwoPencils

回答

9

一號線:

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

感謝,作品像魅力 – TUNER88

+0

它會讓「不能相信它」=>「可以相信它」 – krinker

1

你的做法是,除了罰款:

  • 你沒有當你重建字符串保留的空間數量。
  • 您應該使用StringBuilder而不是+=
  • 最後添加冗餘空間。

我會做這樣的事情:在字符串

迭代,只要我有一個char,我計數器加炭加一些臨時的字符串,否則,我有一個空間。我檢查計數器的值,如果它是<= 5我不添加temp字符串,否則,我這樣做。這樣我也保留了空間。

關於複雜性,當n是字符串的長度時,它是O(n),因爲我們僅在字符串上「旅行」了一次。

1

你的做法是好的,但由於性能的原因,最好是使用使用StringBuilder,因爲+=在循環的每次迭代創建它。還要注意Maroun對輸出完整性的評論。

另一種選擇是使用正則表達式,這個調用應該有同樣的效果:

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

注意,出於性能考慮,您想預先comile模式,並重新使用它。

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], ""); 
0

嘗試使用StringTokenizer的,而不是分裂和使用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();