2016-11-28 116 views
2

我試圖做一個程序,在這句話我與任何用戶想要的字由替換詞替換爲:使用replaceAll忽略複數,首字母和標點符號?

「鴨子嘎嘎在跳舞的鴨子鴨子快樂悲傷!鴨子!」

但是,問題是我不知道如何與資本,複數,標點符號(鴨,鴨,鴨!鴨!等)

我現在有取代鴨的版本這個版本,但它只是取代「鴨」,我不知道如何做其他變化。

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 

    String story = "The duck quacked at the ducks dancing. Happy ducks! Sad Ducks!"; 

    System.out.println("What word do you want replaced?"); 
    String replaceWord = keyboard.nextLine(); 

    story = story.replaceAll("\\bduck\\b", replaceWord); 

    System.out.println(story); 
} 
+0

附註:您的程序邏輯似乎有點偏離,您問*「您要替換哪個單詞?」*但您只能替換「鴨子」。不應該使用問兩個問題*「你想替換哪個單詞?」然後*「什麼單詞應該替換[單詞]?」*。 –

回答

1

使用replaceAll忽略複數,資本和標點符號?

您已通過圍繞\\b模式管理好標點符號。

要忽略資本(忽略大小寫),您可以用(?i)前綴的模式,就像這樣:

story = story.replaceAll("(?i)\\bduck\\b", replaceWord); 

要處理複數...這是特定的語言,和通常非常不規則。 如果你想處理這樣的事情,那麼你將需要一個單數和複數形式的字典。即使如此,也可能會出現某些特殊詞語的錯誤否定。

+0

很酷謝謝你!你認爲如果我想做複數,我可以有多個replaceAll來處理這些版本?我正在使用Java的方式 –

+0

處理複數將不會有完美的解決方案。但是你可以使用多個'replaceAll'來處理最常見的情況。 – janos

相關問題