2017-06-04 93 views
-1

但它刪除空格。我不想刪除空白區域!我該怎麼辦?我使用正則表達式刪除字符串中的重複單詞

原始文本

贊贊贊這部電影,這是非常非常非常非常好好 好

刪除重複

利剋剋這部電影,這是索索goodgood

這裏是我的代碼:

String result = s.replaceAll("(?i)\\b([a-z]+)\\b(?:\\s+\\1\\b)+", "$1$1"); 
+3

爲什麼要使用''$ 1 $ 1''作爲替換字符串而不是'「$ 1」'? –

+0

@DawoodibnKareem因爲我想要的結果像Like Like -----> Like Like – Shar

+1

像「like like」之間有一個空格嗎?像'「$ 1 $ 1」'也許? –

回答

0

你的代碼是正確的,但你只需要$1更換$1$1

編輯: Dawood ibn Kareem在評論中也提到它。

+0

我想要結果(就像喜歡喜歡)。這就是爲什麼我使用$ 1 $ 1的原因。 – Shar

0
/** 
* 
* @author Md. Amran Hossain 
*/ 
public class DuplicateWordRemove { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    String s = "like like like"; 
    // TODO code application logic here 
    String result = s.replaceAll("(?i)\\b([a-z]+)\\b(?:\\s+\\1\\b)+", "$1"); 
    System.out.println(""+result); 
} 

}

輸出

+0

我想要的結果是(喜歡喜歡喜歡喜歡)。我該怎麼辦? – Shar

+0

@Shar你需要刪除重複的單詞...如果你刪除第一個重複的單詞,你需要像這樣使用「$ 1 \ f $ 1」:String result = s.replaceAll(「(?i)\\ b([az] + )\\ b(?:\\ s + \\ 1 \\ b)+「,」$ 1 \ f $ 1「);輸出是:like like like –

+0

謝謝@amran_bd:D – Shar

0

試試這個。

String result = s.replaceAll("(?i)(\\b\\w+\\b)\\s+\\1", "$1"); 
+0

謝謝我得到了答案:D – Shar

0

更新回答

對不起,張貼第二個答案,但我只是想確定你得到通知這個答案的。

String h = s.replaceAll("(?i)\\b([a-z]+)\\b((?:\\s+\\1\\b)+)", "$2"); 
h = h.replaceAll("\\s+", " ")); 

這應該刪除最後一個重複的字:)

+0

謝謝@Coffeehouse Coder: D – Shar

+0

@Shar Anytime bro! –

1

由於達烏德·本·賈巴爾指出,在評論中,如果你想的話之間的空間,爲什麼不你在替換模式添加一個空格,如下所示:

String result = s.replaceAll("(?i)\\b([a-z]+)\\b(?:\\s+\\1\\b)+", "$1 $1"); 
+0

是啊!我明白了。謝謝@Nacimota:D – Shar

相關問題