2016-11-28 74 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

相关问题